Localization XPage本地化过程:如何批量翻译属性文件?

Localization XPage本地化过程:如何批量翻译属性文件?,localization,xpages,Localization,Xpages,我们有一个巨大的项目,有100多个定制控件和xpage,现在我们打算以多种语言提供该项目 XPages中的本地化提供了一种通过属性文件以另一种语言转换整个项目的漂亮且非常简单的方法。然而,在我们的例子中,许多自定义控件是其他控件的复写副本,并且许多翻译/关键字都是相同的,反复更改相同的内容会变得有些多余 所以问题是,有没有更简单的方法,我们可以一起做大量的翻译?我们可以将整个翻译导出为一个文件,然后再导入回来 如有任何方向正确的建议/帮助,我们将不胜感激 不要使用XPage的内置本地化。它可能适

我们有一个巨大的项目,有100多个定制控件和xpage,现在我们打算以多种语言提供该项目

XPages中的本地化提供了一种通过属性文件以另一种语言转换整个项目的漂亮且非常简单的方法。然而,在我们的例子中,许多自定义控件是其他控件的复写副本,并且许多翻译/关键字都是相同的,反复更改相同的内容会变得有些多余

所以问题是,有没有更简单的方法,我们可以一起做大量的翻译?我们可以将整个翻译导出为一个文件,然后再导入回来


如有任何方向正确的建议/帮助,我们将不胜感激

不要使用XPage的内置本地化。它可能适用于第一次翻译,但在XPages中进行了大量更改之后,很难进行维护

改用托管Javabean。 它管理自己的属性文件并实现映射接口

您可以使用bean来获取字符串,通常使用EL

例如: 使用str['name']获取属性文件中以下项的名称标签

name=Name
message.view.not.found=Could not find view {0}
对于包含数据的消息,请使用java.text.MessageFormat。 在bean中创建一个类似getMessageString名称、对象arg1的方法

例如: 使用获取JavaScript中缺少视图的消息 str.getMessage'message.view.not.found',属性文件中以下条目的viewName

name=Name
message.view.not.found=Could not find view {0}

不要使用XPage的内置本地化。它可能适用于第一次翻译,但在XPages中进行了大量更改之后,很难进行维护

改用托管Javabean。 它管理自己的属性文件并实现映射接口

您可以使用bean来获取字符串,通常使用EL

例如: 使用str['name']获取属性文件中以下项的名称标签

name=Name
message.view.not.found=Could not find view {0}
对于包含数据的消息,请使用java.text.MessageFormat。 在bean中创建一个类似getMessageString名称、对象arg1的方法

例如: 使用获取JavaScript中缺少视图的消息 str.getMessage'message.view.not.found',属性文件中以下条目的viewName

name=Name
message.view.not.found=Could not find view {0}
另一种方法是使用手动创建的属性文件 以下是两种语言的示例:

首先,您必须在Resources/files下创建以下两个文件

messages.properties

消息属性

现在,您可以在代码中的每个位置引用消息属性

<xp:this.resources>
    <xp:bundle src="/messages.properties" var="resMessage"></xp:bundle>
</xp:this.resources>

<xp:text escape="true" id="cfUser" themeId="Text.User">
    <xp:this.value><![CDATA[${javascript:I18n.format(resMessage['global.welcome'], sessionScope.commonUserName)}]]></xp:this.value>
</xp:text>
另一种方法是使用手动创建的属性文件 以下是两种语言的示例:

首先,您必须在Resources/files下创建以下两个文件

messages.properties

消息属性

现在,您可以在代码中的每个位置引用消息属性

<xp:this.resources>
    <xp:bundle src="/messages.properties" var="resMessage"></xp:bundle>
</xp:this.resources>

<xp:text escape="true" id="cfUser" themeId="Text.User">
    <xp:this.value><![CDATA[${javascript:I18n.format(resMessage['global.welcome'], sessionScope.commonUserName)}]]></xp:this.value>
</xp:text>

啊,好吧,从来没有真正使用过bean,但是,它看起来很有希望。我会研究一下。你认为本地化概念还有其他可能的解决方案吗?或者它只是用于小型项目?内置本地化可能适用于小型项目或您将来不会更改的项目。我们研究了这一点,特别是当您更改XPage的元素(如其id)时会发生什么。在我们看来,这很难处理。因此,我们决定改用托管JavaBean,一旦我们开始使用它,我们就向它添加了更多功能,比如使用属性文件级联,比如一个具有对所有应用程序有效的通用字符串的文件和另一个特定于应用程序的文件。我们非常喜欢这种方法。是的,还在努力,但我看到了它的优势。我会给它一两天的时间来寻找更多的建议,否则这似乎是一个合适的方法。谢谢你。啊,好吧,从来没有真正使用过bean,但是,它看起来很有希望。我会研究一下。你认为本地化概念还有其他可能的解决方案吗?或者它只是用于小型项目?内置本地化可能适用于小型项目或您将来不会更改的项目。我们研究了这一点,特别是当您更改XPage的元素(如其id)时会发生什么。在我们看来,这很难处理。因此,我们决定改用托管JavaBean,一旦我们开始使用它,我们就向它添加了更多功能,比如使用属性文件级联,比如一个具有对所有应用程序有效的通用字符串的文件和另一个特定于应用程序的文件。我们非常喜欢这种方法。是的,还在努力,但我看到了它的优势。我会给它一两天的时间来寻找更多的建议,否则这似乎是一个合适的方法。谢谢,谢谢。尝试过这个,但是每次创建新元素时都要引用元素;对于属性文件,它通常只是自动映射。谢谢。已经尝试过这一点,但是每次创建新元素时都要引用元素 新界;对于属性文件,它通常只是自动映射它。