2016-06-14 77 views
1

来定位Movilizer应用程序(提供多语言支持),我使用下面的方法更换屏幕的占位符:与本地化MasterData提供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> 

<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应用程序?

+0

这取决于要求的位。这种方法取决于参与者注册期间使用的语言。随时切换语言变得棘手。如果不需要切换,那就好了。尽管Masterdata的创建需要默认语言 –

回答

2

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

$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; 
    }; 

在动态语言切换

那么,如果语言切换,而无需重新配置和同步所需的解决方案并不遥远从这里描述的内容。现在需要做的是:

  1. 创建并设置一个全球性的语言变量

  2. 调整MasterData在你有几个语言子阵列中的一个关键的数据部分和调整的方式方法。

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

本地化Movelet名工作像这样:

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