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

z00*_*0bs 14 gwt internationalization uibinder

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

这样就可以通过常量接口访问Java代码中的常量

Window.alert(myConstants.helloWorld());
Run Code Online (Sandbox Code Playgroud)

以及在UiBinder中使用它们 .ui.xml

<ui:attribute key="some.key" name="text" description="useful info" />
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ale*_*lex 12

此问题似乎在当前版本中得到修复.

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


小智 6

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

例:

register.form.success=Un courriel a 'ét'é envoy'é a l''adresse suivante ': {0}
Run Code Online (Sandbox Code Playgroud)


z00*_*0bs 1

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

我们创建了一个实现常量接口的包装类,该类在将 i18n 常量传递给String modify(String)调用者之前将它们简单地传递给 a。

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());
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

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