Files
cms_thermo_active/Step/Controllers/WebApi/LanguageController.cs
T
2018-08-20 17:26:01 +02:00

152 lines
6.2 KiB
C#

using Step.Model.DTOModels;
using Step.NC;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
using static CMS_CORE_Library.DataStructures;
using static Step.Config.ServerConfig;
using static Step.Model.Constants;
using static Step.Utils.LanguageController;
namespace Step.Controllers.WebApi
{
[RoutePrefix("api/language")]
public class LanguageController : ApiController
{
[Route("languages"), HttpGet]
public IHttpActionResult GetLanguageList()
{
List<DTOLanguageModel> availableLanguages = GetLanguageListFromDirectory();
if (availableLanguages == null)
return NotFound();
return Ok(availableLanguages);
}
[Route("{language}"), HttpGet()]
public IHttpActionResult GetTranslations(string language)
{
if (!IsValidLanguage(language))
return BadRequest("Language not exists");
if (!LanguageIsAvailable(language))
return NotFound();
Dictionary<string, string> translations = GetTranslationsFromFile(language);
// Get Maintenance, Softkey, Plc Alarm translations
Dictionary<string, string> maintenance = GetLocalizeMaintenanceName(language);
Dictionary<string, string> softKeys = GetLocalizedSoftKeysNames(language);
Dictionary<string, string> alarms = GetPlcAlarmsTranslations(language);
Dictionary<string, string> heads = GetLocalizedHeadsNames(language);
// Concat maintenances dictionary with translations dictionary
translations = translations.Concat(maintenance).ToDictionary(x => x.Key, x => x.Value);
translations = translations.Concat(softKeys).ToDictionary(x => x.Key, x => x.Value);
translations = translations.Concat(alarms).ToDictionary(x => x.Key, x => x.Value);
translations = translations.Concat(heads).ToDictionary(x => x.Key, x => x.Value);
if (translations == null)
return InternalServerError();
return Ok(translations);
}
private static Dictionary<string, string> GetLocalizeMaintenanceName(string language)
{
Dictionary<string, string> localizedStrings = new Dictionary<string, string>();
// Get localized name
localizedStrings = MaintenancesConfig
.ToDictionary(
x => MAINTENANCE_PREFIX_ID + x.Id.ToString(), // Prefix + maintenance id
x => GetValueFromLocalizationList(x.LocalizedName, language, "Maintenance_" + x.Id)
);
// Get localized description
localizedStrings = localizedStrings.Concat( MaintenancesConfig
.ToDictionary(
x => MAINTENANCE_DESC_PREFIX_ID + x.Id.ToString(), // Description Prefix + maintenance id
x => GetValueFromLocalizationList(x.LocalizedDescription, language, "Maintenance_" + x.Id)
)).ToDictionary(x => x.Key, x => x.Value);
return localizedStrings;
}
private static Dictionary<string, string> GetLocalizedSoftKeysNames(string language)
{
return SoftKeysConfig
.ToDictionary(
x => SOFTKEY_PREFIX_ID + x.Id.ToString(), // PREFIX + softkey Id
x => GetValueFromLocalizationList(x.LocalizedNames, language, "SoftKey_" + x.Id)
);
}
private static Dictionary<string, string> GetLocalizedHeadsNames(string language)
{
return HeadsConfig
.ToDictionary(
x => SOFTKEY_HEAD_ID + x.Id.ToString(), // PREFIX + softkey Id
x => GetValueFromLocalizationList(x.LocalizedNames, language, "Head_" + x.Id)
);
}
private static string GetValueFromLocalizationList(Dictionary<string, string> localizedNames, string language, string defaultString)
{
// Find text from names by language id
var value = localizedNames.Where(y => y.Key == language).FirstOrDefault();
// Set default value
if (value.Key == null)
return defaultString;
else
return value.Value;
}
private static Dictionary<string, string> GetPlcAlarmsTranslations(string language)
{
using (NcHandler ncHandler = new NcHandler())
{
CmsError cmsError = ncHandler.Connect();
Dictionary<string, string> returnValue = new Dictionary<string, string>();
Dictionary<int, string> messages = new Dictionary<int, string>();
// Read data from CN
cmsError = ncHandler.numericalControl.NC_GetTranslatedPlcMessages(language, ref messages);
// Id start from 1
for(int i = 1; i <= 1024; i++)
{
// Get configurated alarms
var tmpAlarmConfig = InitialAlarmsConfig.Where(x => x.PlcId == i).FirstOrDefault();
// Default string
string message = "Alarm_id_" + i + ": Message not configurated";
// If is configurated
if (tmpAlarmConfig != null)
{
// Find translated string
message = messages.Where(x => x.Key == tmpAlarmConfig.AlarmId).FirstOrDefault().Value;
if (message == null)
message = "Alarm_id_" + i + ": Message not found";
}
// Add to dictionary
returnValue.Add(
ALARM_PREFIX + i,
message
);
}
return returnValue;
}
}
private static Dictionary<string, string> GetCoolingTranslations(string language)
{
Dictionary<string, string> dictionary = new Dictionary<string, string>();
var key = ToolManagerConfig.CooligsTranslations.Cooling.Where(x => x.Key == language).FirstOrDefault();
dictionary.Add("cooling", key.Value);
}
}
}