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代码中使用相同的属性文件而不会遇到恼人的单引号问题?
小智 6
转义字符是单引号'(而不是通常的反斜杠\)
例:
register.form.success=Un courriel a 'ét'é envoy'é a l''adresse suivante ': {0}
Run Code Online (Sandbox Code Playgroud)
由于似乎没有其他解决方案,我将发布针对上述问题的解决方法:
我们创建了一个实现常量接口的包装类,该类在将 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)
我仍然期待真正的解决方案。