我们在位于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代码中使用相同的属性文件而不会遇到恼人的单引号问题?
答案 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());
}
...
}
我仍然期待着真正的解决方案。