Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
i18n的Java AOP或注释_Java_Jsp_Internationalization_Annotations_Aop - Fatal编程技术网

i18n的Java AOP或注释

i18n的Java AOP或注释,java,jsp,internationalization,annotations,aop,Java,Jsp,Internationalization,Annotations,Aop,我正在开发一个jsp web应用程序,它本来不打算是多语言的,但现在他们希望它能够根据浏览器的语言环境更改用户界面语言 因此,为标签和其他固定元素实现i18n是很容易的,但是我们有一个仪表板框架,它有一些标准报告,这些报告的标题、列标题和其他元素也是固定的,但是从数据库中检索,并且不是所有的都将被翻译 我想用一些符号来表示哪个字段值是可翻译的元素来解决这个问题。例如,可以使用一些#{resource.bundle.key.element}符号 嗯,仪表盘实体使用JPA。因此,我想知道是否有可能使

我正在开发一个jsp web应用程序,它本来不打算是多语言的,但现在他们希望它能够根据浏览器的语言环境更改用户界面语言

因此,为标签和其他固定元素实现i18n是很容易的,但是我们有一个仪表板框架,它有一些标准报告,这些报告的标题、列标题和其他元素也是固定的,但是从数据库中检索,并且不是所有的都将被翻译

我想用一些符号来表示哪个字段值是可翻译的元素来解决这个问题。例如,可以使用一些
#{resource.bundle.key.element}
符号

嗯,仪表盘实体使用JPA。因此,我想知道是否有可能使用资源包进行i18n转换,并在从DB检索值后进行区域设置转换,而不进行侵入性编码,可能使用注释或AOP实现


这可能吗?或者我可以使用另一种方法?

国际化是一个贯穿各领域的问题,因此是AOP的一个很好的候选者。使用AspectJ,您可以执行以下操作(简单、朴素的示例,仅作为概念证明):

驱动程序应用程序:

package de.scrum\u master.app;
公共类应用程序{
公共枚举语言{EN,DE,FR};
公共最终语言;
公共应用程序(语言){
这种语言=语言;
}
公共静态void main(字符串[]args){
for(语言:Language.values())
新应用程序(语言).printStuff();
}
私有void printStuff(){
System.out.println(“你好世界”);
System.out.println(“此错误消息将不会被翻译”);
系统输出打印项次(“一”);
System.out.println(“两个”);
System.out.println(“三”);
System.out.println(“此错误消息也不会被翻译”);
System.out.println(“再见”);
System.out.println();
}
}
翻译方面:

请注意:静态翻译内容应该存储在属性文件中。我知道这样很难看

package de.scrum\u master.aspect;
导入java.util.HashMap;
导入java.util.Map;
导入de.scrum_master.app.Application;
导入de.scrum_master.app.Application.Language;
公共方面翻译方面{
私有静态最终映射字典=新HashMap();
静止的{
Map translations=newhashmap();
translations.put(Language.EN,“Hello world”);
翻译.put(Language.DE,“你好”);
翻译.put(Language.FR,“世界报你好”);
dictionary.put(“你好,世界”,翻译);
translations=新HashMap();
translations.put(Language.EN,“再见”);
翻译.put(Language.DE,“Auf wiedershen”);
翻译。put(Language.FR,“Au revoir”);
字典。放(“再见”,翻译);
translations=新HashMap();
翻译。put(Language.EN,“一”);
翻译.put(Language.DE,“eins”);
翻译。put(Language.FR,“un”);
字典。放(“一”,翻译);
translations=新HashMap();
翻译。put(Language.EN,“两个”);
翻译.put(Language.DE,“zwei”);
翻译。put(Language.FR,“deux”);
字典。放(“两个”,翻译);
translations=新HashMap();
翻译。put(Language.EN,“三”);
翻译.put(Language.DE,“drei”);
translations.put(Language.FR,“trois”);
字典。放(“三”,翻译);
}
周围空白(应用程序、字符串文本):
调用(**.println(字符串))&&this(应用程序)&&args(文本)
{
进行(
应用
dictionary.get(text)==null?text:dictionary.get(text).get(application.language)
);
}
}
控制台输出:

你好,世界
此错误消息将不会被翻译。
一
二
三
此错误消息也不会被翻译。
再见
哈罗贴边
此错误消息将不会被翻译。
埃因斯
茨威
德雷
此错误消息也不会被翻译。
奥夫·维德尔申
《世界报》你好
此错误消息将不会被翻译。
联合国
双份
特洛伊
此错误消息也不会被翻译。
再见
享受吧