Codeunit 53 Translation Helper, source in 29

Source29

src/Layers/W1/BaseApp/Modules/System/Translation/TranslationHelper.Codeunit.al103 lines, Copyright (c) Microsoft Corporation. MIT

namespace System.IO;

using System.Globalization;
using System.Reflection;

codeunit 53 "Translation Helper"
{
    // The codeunit is designed to clean the defined functions from codunit 43 (Language Management).
    // The functions are needed exclusively to provide means to translate TextConst variables.
    // This functionality should be provided in the platform and this codeunit should be deleted.


    trigger OnRun()
    begin
    end;

    var
        SavedGlobalLanguageId: Integer;

    // <summary>
    // Sets the global language by language code.
    // If the language code is invalid the global language remains unchanged, no error in thrown.
    // </summary>
    // <param name="LanguageCode">The code of the language to be set as global</param>
    procedure SetGlobalLanguageByCode(LanguageCode: Code[10])
    var
        Language: Codeunit Language;
        LanguageId: Integer;
    begin

        if LanguageCode = '' then
            exit;

        LanguageId := Language.GetLanguageId(LanguageCode);
        SetGlobalLanguageById(LanguageId);
    end;

    // <summary>
    // Sets the global language by language id.
    // If the language id is 0 the global language remains unchanged, no error in thrown.
    // </summary>
    // <param name="LanguageId">The Id of the language to be set as global</param>
    procedure SetGlobalLanguageById(LanguageId: Integer)
    begin
        if LanguageId <> 0 then begin
            SavedGlobalLanguageId := GlobalLanguage;
            GlobalLanguage(LanguageId);
        end;
    end;

    // <summary>
    // Sets the global language to the default application language ID.
    // </summary>
    procedure SetGlobalLanguageToDefault()
    var
        Language: Codeunit Language;
    begin
        SetGlobalLanguageById(Language.GetDefaultApplicationLanguageId());
    end;

    // <summary>
    // Restores the previously set global language
    // </summary>
    // <seealso>SetGlobalLanguageByCode</seealso>
    procedure RestoreGlobalLanguage()
    begin

        if (SavedGlobalLanguageId <> 0) and (SavedGlobalLanguageId <> GlobalLanguage) then begin
            GlobalLanguage(SavedGlobalLanguageId);
            SavedGlobalLanguageId := 0;
        end;
    end;

    // <summary>
    // Retrieves a translated field caption
    // </summary>
    // <param name="LanguageCode">The code of the language to which the field caption will be translated.</param>
    // <param name="TableID">The ID of the table where the field is located.</param>
    // <param name="FieldId">The ID of the field for which the caption will be translated.</param>
    // <returns>The field's caption translated in the specified language</returns>
    procedure GetTranslatedFieldCaption(LanguageCode: Code[10]; TableID: Integer; FieldId: Integer) TranslatedText: Text
    var
        "Field": Record "Field";
        Language: Codeunit Language;
        LanguageIdToSet: Integer;
        CurrentLanguageId: Integer;
    begin

        CurrentLanguageId := GlobalLanguage;
        LanguageIdToSet := Language.GetLanguageIdOrDefault(LanguageCode);
        if (LanguageCode <> '') and (LanguageIdToSet <> CurrentLanguageId) then begin
            GlobalLanguage(LanguageIdToSet);
            Field.Get(TableID, FieldId);
            TranslatedText := Field."Field Caption";
            GlobalLanguage(CurrentLanguageId);
        end else begin
            Field.Get(TableID, FieldId);
            TranslatedText := Field."Field Caption";
        end;
    end;
}