﻿<?xml version="1.0" encoding="utf-8"?>
<AlvaoApplication xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ModelVersion="1">
  <Applications>
    <Application id="59">
      <Name>Multilingual Command</Name>
      <Description>Reference command with localized text.</Description>
      <Scripts>
        <Script id="2876">
          <Name>Localization</Name>
          <Code>using System.Linq;
using System.Collections.Generic;
using Microsoft.Data.SqlClient;
using Alvao.API.Common;

// Copy this script 1:1 into your application.
public class Localization 
{
    public static List&lt;LocalizationItem&gt; Localizations {get {
       /* Init Localizations list with your values .
        It takes: 
         - LCID https://www.science.co.il/language/Locale-codes.php 
         - string name
         - actual translation 
        */
        return new List&lt;LocalizationItem&gt;() {
            new LocalizationItem(1029, "CommandName", "Přeložený název příkazu"),
            new LocalizationItem(1033, "CommandName", "Translated command name"),
            new LocalizationItem(1031, "CommandName", "Übersetzter Befehlsname"),
            new LocalizationItem(1045, "CommandName", "Przetłumaczona nazwa polecenia"),
        };
    } }

    public static string GetLocalization(int personId, string name)
    {
        var localeId = GetPersonLocaleId(personId);
        var translation = FindInList(localeId, name);
        if (string.IsNullOrEmpty(translation))
        {
            localeId = GetDefaultLocaleId();
            translation = FindInList(localeId, name);
            if (string.IsNullOrEmpty(translation))
            {
                localeId = Locale.GetDatabaseLocaleId();
                translation = FindInList(localeId, name); 
            }
        }
        return translation;
    }

    private static string FindInList(int localeId, string name)
    {
        return Localizations.FirstOrDefault(x=&gt;x.LocaleId == localeId &amp;&amp; x.Name == name)?.Translation;
    }

    private static int GetDefaultLocaleId()
    {
        var locale = Person.GetCultureInfoOrDefault(new Alvao.API.Common.Model.Database.tPerson()).LCID;
        return locale;
    }

    private static int GetPersonLocaleId(int personId)
    {
        var locale = Person.GetById(personId).iPersonLocaleId;
        if (!locale.HasValue)
        {
            return GetDefaultLocaleId();
        }
        return locale.Value;
    }
}

public class LocalizationItem
{
    public int LocaleId {get; set;}
    public string Name {get; set;}
    public string Translation {get; set;}

    public  LocalizationItem(int localeId, string name, string translation)
    {
        this.LocaleId = localeId;
        this.Name = name;
        this.Translation = translation;
    }
}</Code>
          <IsLibCode>true</IsLibCode>
        </Script>
        <Script id="2877">
          <Name>MultilingualCommand</Name>
          <Code>using System;
using Alvao.API.Common.Model.CustomApps;
using Alvao.Apps.API;

public class MultilingualCommand : IEntityCommand 
{
    public string Id {get; set;}
    public Entity Entity {get; set;}

    public MultilingualCommand()
    {
        Id = "MultilingualCommand";
        Entity = Entity.Request;
    }

    public EntityCommandShowResult Show(int entityId, int personId)
    {   
        int position = 1; 
        string icon = "local_language_20_regular"; 

        // Call the localization class and get the localized string for the user's preferred language.
        string name = Localization.GetLocalization(personId, "CommandName"); 

        // Command show all users.
        bool show = true; 

        return new EntityCommandShowResult (show, name, icon, position);
    }

    public CommandResult Run(int entityId, int personId)
    {
        // Command does nothing.
        throw new NotImplementedException();
    }
}</Code>
          <IsLibCode>false</IsLibCode>
        </Script>
      </Scripts>
    </Application>
  </Applications>
</AlvaoApplication>