我有一个问题(应该是一个GWT功能),当我我的国际化的webapp到RTL语言。基本上,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>
问候
Unfortunally这是一个数字的GWT小部件的功能。这些构件内部调用LocaleInfo.getCurrentLocale().isRTL()
即使你会以某种方式改变这个返回值调用它,然后将禁用RTL文本也。所以,这不是一个选项。
我猜你有2种选择。首先,不使用isRTL添加插件检查时使用RTL支票或其次,自己和在相反方向上添加它小工具。例如,如果您有一个小部件添加到WEST
,将其添加到EAST
时isRTL()
是真实的。这两个选项是不是最佳的,但我看到没有其他解决办法。
GET支持RTL和LTR语言
<inherits name="com.google.gwt.user.theme.chrome.Chrome"/>
使用*.gwt.xml
(默认主题)<inherits name="com.google.gwt.user.theme.chrome.ChromeRTL"/>
in *.gwt.xml
在你的情况,如果你不想GWT特征反映了接口RTL然后使用<inherits name="com.google.gwt.user.theme.chrome.Chrome"/>
您可以创建一个在您的项目称为“CldrImpl_ar”中的“com.google.gwt.i18n.client.impl.cldr”包下的类(你必须创建这个包自己)。该类将包含以下代码:
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;
}
}
这个类已存在于GWT库中的代码,但返回的值是真实的存在。一旦这个独立的类被创建,它优先于一个在GWT库,从而实现了“重写”的效果。
这不正是你在找什么:
最终的结果可能是不适合的阿拉伯语用户最好的体验,但它确实节省显著发展的时间,如果支持从右到左是不是为您的项目高度重视..
我们有同样的问题。使用GWT的2.6.x,您可以通过使用延迟绑定,迫使LocaleInfo.isRTL()以虚假的价值实现这一点:
<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类:
public class CldrImplLtr extends CldrImpl {
@Override
public boolean isRTL() { return false; }
}
似乎有一些有趣的事情,但它似乎比支持的接口的全从右到左镜像更易于管理。