GWT 国际化为阿拉伯语(RTL 语言)?
GWT Internationalization to Arabic (RTL language)?
当我将我的 Web 应用程序国际化为 RTL 语言时遇到问题(应该是 GWT 功能)。基本上,GWT 功能反映了 RTL 的接口,我不希望这种情况发生。
如何防止 GWT 自动镜像我的界面并只保留翻译后的字符串?
这是我的 *.gwt.xml 代码:
<!DOCTYPE ... >
<module rename-to='blah'>
<inherits name='com.google.gwt.user.User' />
<inherits name='com.google.gwt.user.theme.clean.Clean'/>
<inherits name="com.google.gwt.i18n.I18N"/>
<inherits name="com.google.gwt.json.JSON" />
<inherits name="com.google.gwt.user.Debug"/>
<extend-property name="locale" values="pt"/>
<extend-property name="locale" values="es"/>
<extend-property name="locale" values="ar"/>
<source path="client"/>
<source path="shared"/>
<entry-point
class="EntryPoint"/>
<!-- Remote services -->
</module>
此致
GWT 支持 RTL 和 LTR 语言
- 如果你想要 LTR(Left to Right) 主题,那么在
*.gwt.xml
中使用 <inherits name="com.google.gwt.user.theme.chrome.Chrome"/>
(默认主题)
- 如果您想要 RTL(从右到左)主题,请使用
<inherits name="com.google.gwt.user.theme.chrome.ChromeRTL"/>
in *.gwt.xml
在您的情况下,如果您不希望 GWT 功能将接口镜像到 RTL,则使用 <inherits name="com.google.gwt.user.theme.chrome.Chrome"/>
不幸的是,这是许多 GWT 小部件的功能。这些小部件在内部调用 LocaleInfo.getCurrentLocale().isRTL()
,即使您以某种方式更改此调用的 return 值,它也会禁用文本的 rtl。所以那不是一个选择。
我猜你有两个选择。首先,不要使用使用 RTL 检查的小部件,或者其次,在添加小部件时自己检查 isRTL 并将其添加到相反的方向。例如,如果您将小部件添加到 WEST
,请在 isRTL()
为真时将其添加到 EAST
。这两个选项都不是最佳选择,但我看不到其他解决方案。
我们遇到了同样的问题。使用 GWT 2.6.x,您可以通过使用延迟绑定将 LocaleInfo.isRTL() 的值强制为 false 来实现此目的:
<replace-with class="org.activityinfo.i18n.shared.CldrImplLtr">
<when-type-is class="com.google.gwt.i18n.client.impl.CldrImpl"/>
<when-property-is name="locale" value="ar" />
</replace-with>
如果你想强制这样做,你可以省略 <when-property-is
标签
适用于所有语言环境。
然后提供一个简单的CldrImplLtr class:
public class CldrImplLtr extends CldrImpl {
@Override
public boolean isRTL() { return false; }
}
似乎有一些有趣的事情,但它似乎比支持界面的完全从右到左镜像更易于管理。
您可以在项目中的 "com.google.gwt.i18n.client.impl.cldr" 包下创建一个名为 "CldrImpl_ar" 的 class(您必须自己创建此包)。 class 将包含以下代码:
package com.google.gwt.i18n.client.impl.cldr;
import com.google.gwt.i18n.client.impl.CldrImpl;
public class CldrImpl_ar extends CldrImpl {
@Override
public boolean isRTL() {
return false;
}
}
此 class 已存在于 GWT 库代码中,但那里的 return 值为真。一旦创建了这个独立的 class,它就优先于 GWT 库中的那个,从而达到 "overwriting" 的效果。
这正是您要查找的内容:
- 使用阿拉伯语时没有自动镜像效果
- 只使用翻译后的字符串
最终结果可能不是阿拉伯语用户的最佳体验,但如果支持从右到左不是您的项目的高优先级,它确实可以节省大量开发时间..
当我将我的 Web 应用程序国际化为 RTL 语言时遇到问题(应该是 GWT 功能)。基本上,GWT 功能反映了 RTL 的接口,我不希望这种情况发生。
如何防止 GWT 自动镜像我的界面并只保留翻译后的字符串?
这是我的 *.gwt.xml 代码:
<!DOCTYPE ... >
<module rename-to='blah'>
<inherits name='com.google.gwt.user.User' />
<inherits name='com.google.gwt.user.theme.clean.Clean'/>
<inherits name="com.google.gwt.i18n.I18N"/>
<inherits name="com.google.gwt.json.JSON" />
<inherits name="com.google.gwt.user.Debug"/>
<extend-property name="locale" values="pt"/>
<extend-property name="locale" values="es"/>
<extend-property name="locale" values="ar"/>
<source path="client"/>
<source path="shared"/>
<entry-point
class="EntryPoint"/>
<!-- Remote services -->
</module>
此致
GWT 支持 RTL 和 LTR 语言
- 如果你想要 LTR(Left to Right) 主题,那么在
*.gwt.xml
中使用 - 如果您想要 RTL(从右到左)主题,请使用
<inherits name="com.google.gwt.user.theme.chrome.ChromeRTL"/>
in*.gwt.xml
<inherits name="com.google.gwt.user.theme.chrome.Chrome"/>
(默认主题)
在您的情况下,如果您不希望 GWT 功能将接口镜像到 RTL,则使用 <inherits name="com.google.gwt.user.theme.chrome.Chrome"/>
不幸的是,这是许多 GWT 小部件的功能。这些小部件在内部调用 LocaleInfo.getCurrentLocale().isRTL()
,即使您以某种方式更改此调用的 return 值,它也会禁用文本的 rtl。所以那不是一个选择。
我猜你有两个选择。首先,不要使用使用 RTL 检查的小部件,或者其次,在添加小部件时自己检查 isRTL 并将其添加到相反的方向。例如,如果您将小部件添加到 WEST
,请在 isRTL()
为真时将其添加到 EAST
。这两个选项都不是最佳选择,但我看不到其他解决方案。
我们遇到了同样的问题。使用 GWT 2.6.x,您可以通过使用延迟绑定将 LocaleInfo.isRTL() 的值强制为 false 来实现此目的:
<replace-with class="org.activityinfo.i18n.shared.CldrImplLtr">
<when-type-is class="com.google.gwt.i18n.client.impl.CldrImpl"/>
<when-property-is name="locale" value="ar" />
</replace-with>
如果你想强制这样做,你可以省略 <when-property-is
标签
适用于所有语言环境。
然后提供一个简单的CldrImplLtr class:
public class CldrImplLtr extends CldrImpl {
@Override
public boolean isRTL() { return false; }
}
似乎有一些有趣的事情,但它似乎比支持界面的完全从右到左镜像更易于管理。
您可以在项目中的 "com.google.gwt.i18n.client.impl.cldr" 包下创建一个名为 "CldrImpl_ar" 的 class(您必须自己创建此包)。 class 将包含以下代码:
package com.google.gwt.i18n.client.impl.cldr;
import com.google.gwt.i18n.client.impl.CldrImpl;
public class CldrImpl_ar extends CldrImpl {
@Override
public boolean isRTL() {
return false;
}
}
此 class 已存在于 GWT 库代码中,但那里的 return 值为真。一旦创建了这个独立的 class,它就优先于 GWT 库中的那个,从而达到 "overwriting" 的效果。
这正是您要查找的内容:
- 使用阿拉伯语时没有自动镜像效果
- 只使用翻译后的字符串
最终结果可能不是阿拉伯语用户的最佳体验,但如果支持从右到左不是您的项目的高优先级,它确实可以节省大量开发时间..