为 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 应用程序提供本地化/多语言支持的主要内容,如果未能解决你的问题,请参考以下文章
将 TEXT 字段拆分为多个表是不是可以在多语言应用程序中提供性能优化?