为 Movilizer 应用程序提供本地化/多语言支持

Posted

技术标签:

【中文标题】为 Movilizer 应用程序提供本地化/多语言支持【英文标题】:Provide Localization/Multi language support for Movilizer Applications 【发布时间】:2016-10-15 21:24:00 【问题描述】:

本地化 Movilizer 应用程序(提供多语言支持)我使用以下方法来替换屏幕的占位符:

$global:setPlaceholders = function(key)

    fieldNames = getMasterdata($masterdata:"localisation", key);
    fieldNames = fieldNames["data"];

    for(entry : fieldNames)
    
        setPlaceholder(concat("%", entry, "%"), fieldNames[entry]);
    
;

<answer ... >
    <text>%KEY%</text>
</answer>
<onEnterAssignment>
    call($global:setPlaceholders)("process1.screen1");
</onEnterAssignment>

使用本地化的 MasterData

<MovilizerRequest ... >
  <masterdataPoolUpdate pool="localisation">
    <update key="InventoryManagement.StartScreen" group="DEFAULT">
    <language language="en_us"> 
        <data>
            <entry name="KEY">
                <valstr>Entry</valstr>
            </entry>
        </data>
    </language>

    <language language="de"> 
        <data>
            <entry name="KEY">
                <valstr>Eingabe</valstr>
            </entry>
        </data>
    </language>
    </update>
  </masterdataPoolUpdate>
</MovilizerRequest>

有更好更标准的方法来本地化 Movilizer 应用程序吗?

【问题讨论】:

这取决于要求。这种方法取决于参与者注册期间使用的语言。即时切换语言变得很棘手。如果不需要切换,那很好。主数据创建需要默认语言 【参考方案1】:

在本地化任务方面的其他有用方法

    $global:getLocale = function(pool, key)
    
        fieldNames = getMasterdata($masterdata:"localisation", pool);
        fieldNames = fieldNames["data"];

        return fieldNames[key];
    ;
    $global:getLocaleWithReplacement = function(pool, key, replacement)
    
        fieldNames = getMasterdata($masterdata:"localisation", pool);
        fieldNames = fieldNames["data"];
        locale = fieldNames[key];
        locale = strReplace(locale, "%1%", replacement);
        return locale;
    ;
    $global:getLocaleWithReplacementArray = function(pool, key, replacement)
    
        fieldNames = getMasterdata($masterdata:"localisation", pool);
        fieldNames = fieldNames["data"];
        locale = fieldNames[key];
        for(i : replacement)
        
            placeholder = concat("%", i, "%");
            locale = strReplace(locale, placeholder, replacement[i]);
        
        return locale;
    ;
    $global:getLocalizedList = function(pool, key)
    
        fieldNames = getMasterdata($masterdata:"localisation", pool);
        fieldNames = fieldNames["data"];

        filterValues = fieldNames[key];
        filterValues = strtokenarray(filterValues, ";");

        for(i : filterValues)
        
            filter[i] = filterValues[i];
        
        return filter;
    ;

即时语言切换

如果需要在不重新配置和同步的情况下进行语言切换,则解决方案与此处描述的相差不远。需要做的是:

    创建和设置全局语言变量

    调整 MasterData,使键的数据部分中有多个语言子数组,并相应地调整方法。

您甚至不需要更改方法签名。

本地化 Movelet 名称的工作方式如下:

<nameExpression>
  call($global:getLocaleWithReplacementArray)("process.movelet", "MOVELET_TITLE", 0 : $global:amount;1 : $global:unit)
</nameExpression>

【讨论】:

以上是关于为 Movilizer 应用程序提供本地化/多语言支持的主要内容,如果未能解决你的问题,请参考以下文章

[转]iOS应用程序多语言本地化解决方案

[Abp 源码分析]多语言(本地化)处理

[Abp 源码分析]十多语言(本地化)处理

将 TEXT 字段拆分为多个表是不是可以在多语言应用程序中提供性能优化?

Mac App Store 的多语言应用程序 - 在哪里设置 Mac App Store 中显示的语言?

IOS:启动镜像多语言