GWT国际化阿拉伯语(RTL语言)?

问题描述 投票:1回答:4

我有一个问题(应该是一个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>

问候

gwt internationalization arabic
4个回答
0
投票

Unfortunally这是一个数字的GWT小部件的功能。这些构件内部调用LocaleInfo.getCurrentLocale().isRTL()即使你会以某种方式改变这个返回值调用它,然后将禁用RTL文本也。所以,这不是一个选项。

我猜你有2种选择。首先,不使用isRTL添加插件检查时使用RTL支票或其次,自己和在相反方向上添加它小工具。例如,如果您有一个小部件添加到WEST,将其添加到EASTisRTL()是真实的。这两个选项是不是最佳的,但我看到没有其他解决办法。


1
投票

GET支持RTL和LTR语言

  • 如果你想有LTR(从左至右),那么主题<inherits name="com.google.gwt.user.theme.chrome.Chrome"/>使用*.gwt.xml(默认主题)
  • 如果你想拥有RTL(从右到左)的主题,然后使用<inherits name="com.google.gwt.user.theme.chrome.ChromeRTL"/>in *.gwt.xml

在你的情况,如果你不想GWT特征反映了接口RTL然后使用<inherits name="com.google.gwt.user.theme.chrome.Chrome"/>


1
投票

您可以创建一个在您的项目称为“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库,从而实现了“重写”的效果。

这不正是你在找什么:

  1. 使用阿拉伯当没有自动镜面效果
  2. 只需使用翻译的字符串

最终的结果可能是不适合的阿拉伯语用户最好的体验,但它确实节省显著发展的时间,如果支持从右到左是不是为您的项目高度重视..


0
投票

我们有同样的问题。使用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; }
}

似乎有一些有趣的事情,但它似乎比支持的接口的全从右到左镜像更易于管理。

© www.soinside.com 2019 - 2024. All rights reserved.