如何处理国际化常量中的单引号?

时间:2011-06-30 16:04:09

标签: gwt internationalization uibinder

我们在位于LocalizableResource_xx.properties的单个属性文件google.gwt.i18n.client(每种语言一个)中定义所有国际化常量字符串。

这样就可以通过常量接口

访问Java代码中的常量
Window.alert(myConstants.helloWorld());

以及在UiBinder .ui.xml

中使用它们
<ui:attribute key="some.key" name="text" description="useful info" />

如果字符串包含单引号('),则此方法无法正常工作。这是因为GWT编译器在处理java.text.ParseException: Unterminated single quote:文件时会抛出.ui.xml。如果我们转义引号,意思是加倍它(''),编译器会通过,但通过常量接口访问的字符串包含两个单引号(如You can''t do that)。

用utf-8编码替换单引号\ u0027没有帮助(与上面相同的例外)。

是否有可能在UiBinder模板和Java代码中使用相同的属性文件而不会遇到恼人的单引号问题?

5 个答案:

答案 0 :(得分:12)

此问题似乎已在当前版本中修复。

''(这是两个单引号)对我们来说很好用!

答案 1 :(得分:6)

转义字符是单引号'(而不是通常的反斜杠\

示例:

register.form.success=Un courriel a 'ét'é envoy'é a l''adresse suivante ': {0}

答案 2 :(得分:3)

您必须先使用HTML转义字符(例如&amp;#39;表示单引号')转义您的字符,然后再将其存储在本地化文件中:

您可以在此处找到HTML转义字符列表 http://www.theukwebdesigncompany.com/articles/entity-escape-characters.php (或者你可以在google上搜索“html escape list”。

在你的情况下,你必须写&amp;#39;而不是“'”

希望这能解决你的问题。

答案 3 :(得分:3)

在gwt问题跟踪器上为此创建了一个错误报告 - 请投票支持: http://code.google.com/p/google-web-toolkit/issues/detail?id=6647

答案 4 :(得分:1)

由于似乎没有其他解决方案,我会将解决方法发布到上述问题:

我们创建了一个实现常量接口的包装类,它只是将i18n常量传递给String modify(String),然后才传递给调用者。

public class ConstantsWrapper implements MyConstants {

    private static MyConstants sConstants = GWT.create(MyConstants.class);

    public static String transform(String text) {
        return text.replaceAll("''", "'");
    }

    @Override
    public String someText() {
        return transform(sConstants.someText());
    }

    ...
}

我仍然期待着真正的解决方案。