`
龙晓舟
  • 浏览: 164335 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Abd288eb-a9b2-3549-ba16-f04b1b34dec3
创业,不能兼职
浏览量:24958
文章分类
社区版块
存档分类
最新评论

创业,不能兼职(41)--- java设计之多语言支持,不仅解决静态,而且解决动态

阅读更多
早上和后台小伙子交流语言问题时,他提到2个结论.1 双语言还好办点,多语言困难.2. 可以静态的,不可以动态的.

给了我一个链接,说多语言,是要到property里的那样文件,去把一些 比如 用户密码错误 翻译为 user idpasswordiserror,然后替换如何如何. 说,这个,只能是把静态的语言文字部分翻译,动态的就不行的,比如,写到数据库里,从数据库里读出的就不行.比如用户输入的就不行. 那个,我觉得也是,用户输入什么文字,自然是什么.

可是,还是有问题,就是用户输入的有些,我是想转换的,就是我们自己在数据库里是先要做处理,再呈现的. 比如,你 中国人,选择中文,输入 巴黎, 我是希望,出来的是 巴黎--paris 都有.这个算什么呢?

还有,我又希望,中国人,地址里,也能输入 Paris这样的,最后,所有,巴黎,paris,我们都会给你算一个地方,不会算2个地方.这又算什么?

然后,还有比如,有些地名,有英语名字,中文名字,还有本国名字,我也希望有.比如,都指向同一个地方.这和我说的支持多语言的,有关系还是没关系? 比如,München, 慕尼黑,Munich,这三个,分别是母语,中文,英语的同一个地方. 这个我们之前有讨论,但是没觉得和这个支持多语言有什么关系. 到底有关还是没关?

不过,实际在多语言里,我认为是这样的,就是一个地名,都有 你选择的语言的,就是1\用户母语的名称,在我们,就是中文, 在别人,可能就是法语,日语等等.2\英语地名,3\该国本地语言的地名. 多语言时,变的是第一个, 后面2个是固定的.

不过,怎么建立和得到这些数据,有些我没想明白.


刚刚,看到另外一篇文章, 这文章,至少是解决了,我们后台小伙子认为的,只能解决静态,不能动态的问题.http://java.chinaitlab.com/model/3293.html

最核心我看的懂的概念大致如下:

静态文字和动态文字采取不同的解决方案:
  把所有的网页交给翻译公司对上面的静态文字进行翻译, 而网页上面的动态内容则需要程序解决。
  
需要解决的动态文字的“翻译”问题,实际上是将数据库中的一些静态或者半静态的数据进行“翻译”。下面就是一个典型的数据表:
   
  代码清单1、为英文用户的准备的货币列表。
  货币代码永远是上面所看到的英文代码,但是货币名称应当根据用户所选择的语言不同而不同。比如对中文读者就应当翻译成为下面的表:
   
  代码清单2、为中文用户准备的货币列表。
  这样的表会在网页上作为下拉菜单出现,用户看到的是货币名称,而系统内部使用的是货币代码。
  国际化解决方案
  这样的问题就是国际化的问题,所谓国际化就是Internationalization,简称作i18n(请参见本章最后的问答题)。
  设计师所采取的实际方案是分层方案,也就是MVC模式。MVC模式将系统分为三个层次,也就是模型(Model)、视图(View)、控制器(Control)三个部份。国际化是视图部份的问题,因此应当在视图部份得到解决。
   
  图1、MVC模式的示意图。
  换言之,系统的内核可以是纯英文的;在内核外部增加一个壳层负责语言翻译工作。请见下面的概念图:
   
  图2、英文内核和翻译壳层的概念图。
  所谓内核就是系统的模型,而翻译壳层便是视图的一部份。对多语言的支持属于视图功能,因此不应当在内核解决,而应当在视图解决。这就是设计师们达成的总体方案。
  多态模式 多态模式的特点
  所谓的多态模式(Multiton Pattern),实际上就是单态模式的自然推广。作为对象的创建模式,多态模式或多态类有以下的特点:
  多态类可有多个实例; 多态类必须自己创建、管理自己的实例,并向外界提供自己的实例。
  单态类一般情况下最多只可以有一个实例,请见下面的结构图:




其他的部分我看不太懂了,不知道,我们现在是不是所谓MVC.

现在程序员在干活,我决定不随意打扰他.每天,用一个时间段讨论.

很多时间段独自干活. 提高效率. 不然,就会因为不相干的讨论,分散手头主要的东西.一天下来,可能又没解决任何问题.


分享到:
评论
12 楼 龙晓舟 2011-09-27  
如何实现网站多语言版本
随着国际化的深入,越来越多的网站提供多语言版本给不同国家的用户。最近做的一个项目也涉及到这块,顺便做个总结。
一、通常实现方法有两种:
1、采用多语言模板,通过程序渲染不同语言版本的模板。
比如:
简体版: 文件名.zh_CN.后缀
繁体版: 文件名.zh_TW.后缀
英文版: 文件名.en_US后缀
优点:
(1) 不同语言版本有各自的模板,维护量大,但维护简单。甚至不同版本的模板在显示风格上都可以不同。
缺点:
(1) 同一商业逻辑的页面,需要维护多套模板,有重复工作。
2、采用同一模板,利用ResourceBundle配置多语言resource文件,实现网页上不同语言版本的显示。
优点:
(1) 同一商业逻辑的页面,只需要维护一套模板。
缺点:
(2) 模板的设计难度比较大,需要适应不同语言版本的需求。这个我们在实际工作中遇到过,有些显示英文字符没有问题的样式,在显示中文会出现问题,单个模板的维护难度比较大些。
二、我们先了解一下基础知识,这些会在实际开发中会用到。
1、 java.util.Locale
System.out.println(Locale.getDefault().toString());
输出:zh_CN 表示语言_国家/地区
常用的Locale为
Locale.TRADITIONAL_CHINESE   zh_TW
Locale. SIMPLIFIED_CHINESE     zh_CN
Locale.US                       en_US
2、 字符集
我们常用的字符集:GBK, UTF-8, ISO8859-1。
三、网页中如何实现多语言版本显示?
1、 我们将网页的输出字符集采用UTF-8,即返回网页的http头为:
Content-Type: text/html;charset=UTF-8
这个就需要我们在返回网页内容时候,调用以下语句设置网页的字符集。
servletResponse.setCharacterEncoding("UTF-8")
2、 网页GET/POST提交的时候采用UTF-8的方式。
(1) GET方式:
URL中的非ASCII采用UTF-8的方式编码,比如
http://www.test.com/中国.html?keywords=中国
页面显示的链接为:
http://www.test.com/E4%B8%AD%E5%9B%BD.html?keywords=E4%B8%AD%E5%9B%BD
(2) POST方式:
如果网页的输出字符集为UTF-8,则POST提交的时候表单的数据也是采用UTF-8编码的。
3、 在服务器端我们要设置服务器的字符集。
如果是jboss服务器的话,则需设置tomcat的server.xml
${jboss-home}/server/default/deploy/jbossweb-tomcat55.sar/server.xml
<Connector port="80" address="${jboss.bind.address}"
         maxThreads="250" strategy="ms" maxHttpHeaderSize="8192"
         emptySessionPath="true"
         enableLookups="false" redirectPort="8443" acceptCount="100"
         connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" useBodyEncodingForURI="true" />
4、 在应用程序,在调用HttpServletRequest.getParameters(),需要调用HttpServletRequest.setCharacterEncoding("UTF-8");
5、 采用第一种方案:采用多语言模板。我们可以定义:
Index_zh_CN.html
Index_zh_TW.html
Index_en_US.html
我们可以通过不同的URL,或者用户的IP等信息,选择不同的模板进行渲染。
6、 采用第二种方案:采用单一模板。通过不同语言版本的配置文件获得不同的多语言版本字符串。
java.util.ResourceBundle提供的properties文件本身并很好的支持非ASCII的字符集,我们建议用户采用XMLResourceBundle,采用xml文件的方式定义配置文件。Xml文件本身可以很好的描述自己的编码格式。
<?xml version="1.0" encoding="UTF-8"?>。
11 楼 龙晓舟 2011-09-27  
http://blog.csdn.net/menban/article/details/2237166

小兄弟昨天发我的链接

现在en-US.properties

10 楼 龙晓舟 2011-08-18  
nkshan 写道
地址输入框就相当于搜索框啊,实际上你这里已经不是单纯的搜索地址了,而是输入和这个东西相关的一个词(tag)就能找出来。

你这里面输入的可能性是随时可能变得,比如这个地方又出来一个新称号“花都”,你希望不希望用户输入后就找出来?是不是要加一个tag?

或者可以叫“关键词”


不是tag,是 地址输入框,也是以后查询各类数据都要用的.比如,用户a要去巴黎,找家旅馆, 另外一用户b住过一家,他输入的是巴黎 ***hotel 那城镇的名字 a要是输入paris,就可能找不到这家旅馆了,要是我自己的数据库里有对应的,就无论你输入哪个名字都找到了,不是tag





不是不是,是一个地址库,不是一个地址后面加一个tag
9 楼 nkshan 2011-08-18  
地址输入框就相当于搜索框啊,实际上你这里已经不是单纯的搜索地址了,而是输入和这个东西相关的一个词(tag)就能找出来。

你这里面输入的可能性是随时可能变得,比如这个地方又出来一个新称号“花都”,你希望不希望用户输入后就找出来?是不是要加一个tag?

或者可以叫“关键词”


不是tag,是 地址输入框,也是以后查询各类数据都要用的.比如,用户a要去巴黎,找家旅馆, 另外一用户b住过一家,他输入的是巴黎 ***hotel 那城镇的名字 a要是输入paris,就可能找不到这家旅馆了,要是我自己的数据库里有对应的,就无论你输入哪个名字都找到了,不是tag


8 楼 龙晓舟 2011-08-18  
nkhanxh 写道
你这个似乎变成另外一个问题了,就是所谓的tag。
你看javaeye里面,每篇文章可以标上tag。然后搜索的时候以此为关键字。

只不过你这个tag数目多了点,不是固定的个数。



龙晓舟 写道
nkhanxh 写道
"输入 巴黎, 我是希望,出来的是 巴黎--paris 都有.这个算什么呢?"

那就把所有的文字中的巴黎都弄成“该国文字,paris”

另外你说的这个已经脱离了普通的多国文字了,实际上是更广泛的概念了。

但是我觉得这个是不是第一步可以不支持。

你需要把每个需求,都写上优先级,注意,是以数字形式,而不是以“高中低”
这样的形式。

然后以3周为单位,来规划开发进度。把最高优先级的需求进行技术拆分,估计需要工作量。


然后在这3周范围内放入能完成的工作量,然后开始工作。

这样的好处是计划性和时效性能兼顾。


是的,我现在是用mindmanager 画图,自己标记了优先级,用1.23等数字标的. 不过,没和他们交流.但大致现在要做的事情,我还是分了一下优先级的.这个,语言,我也确实没有要求真的现在做,只是提了一句.之前的程序员, 我问能不能变为英语版的时候,他说非常困难,基本就不可能,而我之前是一开始就告诉他,以后要,如果,只是工作时间和工作量的问题,可以的,如果是结构上不支持,就不行.所以,我这次,好奇地又问了一下.毕竟这个, 到后面是放注册页上的,所以,就在做这个页面时问了一下.

你说的,把所有文字中的巴黎都弄成 该国文字,paris,我还没想过呢. 主要的是,那样的数据,要慢慢积累,是吧,只能先建一个库,留有这样的空,等用户或自己慢慢添加.现在没有现成的完整的各个地名的几种语言的地址数据库. 得用户输入时,去谷歌数据库里抓,不过,每次也是抓的一种语言的,可能后面还得有个翻译,然后匹配的过程.不然,一个用户输入 慕尼黑,另外一个用户输入 munich, 把它当2个地点也不行.我想的是无论输入和搜索哪一种,用这2种方式输入的相关信息都是指向同一个地点的. .

我还没想很清楚.



不是tag,是 地址输入框,也是以后查询各类数据都要用的.比如,用户a要去巴黎,找家旅馆, 另外一用户b住过一家,他输入的是巴黎 ***hotel 那城镇的名字 a要是输入paris,就可能找不到这家旅馆了,要是我自己的数据库里有对应的,就无论你输入哪个名字都找到了,不是tag

7 楼 nkhanxh 2011-08-17  
你这个似乎变成另外一个问题了,就是所谓的tag。
你看javaeye里面,每篇文章可以标上tag。然后搜索的时候以此为关键字。

只不过你这个tag数目多了点,不是固定的个数。



龙晓舟 写道
nkhanxh 写道
"输入 巴黎, 我是希望,出来的是 巴黎--paris 都有.这个算什么呢?"

那就把所有的文字中的巴黎都弄成“该国文字,paris”

另外你说的这个已经脱离了普通的多国文字了,实际上是更广泛的概念了。

但是我觉得这个是不是第一步可以不支持。

你需要把每个需求,都写上优先级,注意,是以数字形式,而不是以“高中低”
这样的形式。

然后以3周为单位,来规划开发进度。把最高优先级的需求进行技术拆分,估计需要工作量。


然后在这3周范围内放入能完成的工作量,然后开始工作。

这样的好处是计划性和时效性能兼顾。


是的,我现在是用mindmanager 画图,自己标记了优先级,用1.23等数字标的. 不过,没和他们交流.但大致现在要做的事情,我还是分了一下优先级的.这个,语言,我也确实没有要求真的现在做,只是提了一句.之前的程序员, 我问能不能变为英语版的时候,他说非常困难,基本就不可能,而我之前是一开始就告诉他,以后要,如果,只是工作时间和工作量的问题,可以的,如果是结构上不支持,就不行.所以,我这次,好奇地又问了一下.毕竟这个, 到后面是放注册页上的,所以,就在做这个页面时问了一下.

你说的,把所有文字中的巴黎都弄成 该国文字,paris,我还没想过呢. 主要的是,那样的数据,要慢慢积累,是吧,只能先建一个库,留有这样的空,等用户或自己慢慢添加.现在没有现成的完整的各个地名的几种语言的地址数据库. 得用户输入时,去谷歌数据库里抓,不过,每次也是抓的一种语言的,可能后面还得有个翻译,然后匹配的过程.不然,一个用户输入 慕尼黑,另外一个用户输入 munich, 把它当2个地点也不行.我想的是无论输入和搜索哪一种,用这2种方式输入的相关信息都是指向同一个地点的. .

我还没想很清楚.

6 楼 龙晓舟 2011-08-17  
nkhanxh 写道
"输入 巴黎, 我是希望,出来的是 巴黎--paris 都有.这个算什么呢?"

那就把所有的文字中的巴黎都弄成“该国文字,paris”

另外你说的这个已经脱离了普通的多国文字了,实际上是更广泛的概念了。

但是我觉得这个是不是第一步可以不支持。

你需要把每个需求,都写上优先级,注意,是以数字形式,而不是以“高中低”
这样的形式。

然后以3周为单位,来规划开发进度。把最高优先级的需求进行技术拆分,估计需要工作量。


然后在这3周范围内放入能完成的工作量,然后开始工作。

这样的好处是计划性和时效性能兼顾。


是的,我现在是用mindmanager 画图,自己标记了优先级,用1.23等数字标的. 不过,没和他们交流.但大致现在要做的事情,我还是分了一下优先级的.这个,语言,我也确实没有要求真的现在做,只是提了一句.之前的程序员, 我问能不能变为英语版的时候,他说非常困难,基本就不可能,而我之前是一开始就告诉他,以后要,如果,只是工作时间和工作量的问题,可以的,如果是结构上不支持,就不行.所以,我这次,好奇地又问了一下.毕竟这个, 到后面是放注册页上的,所以,就在做这个页面时问了一下.

你说的,把所有文字中的巴黎都弄成 该国文字,paris,我还没想过呢. 主要的是,那样的数据,要慢慢积累,是吧,只能先建一个库,留有这样的空,等用户或自己慢慢添加.现在没有现成的完整的各个地名的几种语言的地址数据库. 得用户输入时,去谷歌数据库里抓,不过,每次也是抓的一种语言的,可能后面还得有个翻译,然后匹配的过程.不然,一个用户输入 慕尼黑,另外一个用户输入 munich, 把它当2个地点也不行.我想的是无论输入和搜索哪一种,用这2种方式输入的相关信息都是指向同一个地点的. .

我还没想很清楚.
5 楼 龙晓舟 2011-08-17  
fugary 写道
看完了,整体来说想法不错,也比较有冲劲,努力吧,没有做不成的,就怕不能坚持

不过总体来说,有几点看法【从程序猿角度】
1、个人认为前期需求和设计很重要,整体把握好方向,一来简化开发,二来方便后期维护。
2、还是应该有个技术扎实的技术人员来牵头,基础框架的搭建和设计需要做好。
3、要做的东西要明确,最终用户群是些什么人,有什么样的知识,用户体验比较重要。
4、业务逻辑和流程、模块划分,功能划分,各个功能模块的主次关系,重要的需要先做,不重要的上线后开始做也没关系,这些最好先定下来,讨论分析讨论总结,不要急着开发,整体说来开发其实占整个系统很小一部分。

——————----


真诚的谢谢哈.
1\是的,希望这次来的后台能把框架和设计做好.
2\要做的东西目前阶段的还是明确的.是,整体看,开发占的比例不大,可是,唉,对我,现在是开发比例占的最大,因为,其他的,我都是琢磨很久,甚至远远超过了现在我打算做的:)
4 楼 nkhanxh 2011-08-17  
"输入 巴黎, 我是希望,出来的是 巴黎--paris 都有.这个算什么呢?"

那就把所有的文字中的巴黎都弄成“该国文字,paris”

另外你说的这个已经脱离了普通的多国文字了,实际上是更广泛的概念了。

但是我觉得这个是不是第一步可以不支持。

你需要把每个需求,都写上优先级,注意,是以数字形式,而不是以“高中低”
这样的形式。

然后以3周为单位,来规划开发进度。把最高优先级的需求进行技术拆分,估计需要工作量。


然后在这3周范围内放入能完成的工作量,然后开始工作。

这样的好处是计划性和时效性能兼顾。
3 楼 龙晓舟 2011-08-17  
tommywdl 写道
几乎没发过贴,今天把楼主的该系列帖一口气看完了 很钦佩楼主创业精神,!up


客气,谢谢) 可惜,仅仅有精神没用,有能力更重要.
2 楼 fugary 2011-08-17  
看完了,整体来说想法不错,也比较有冲劲,努力吧,没有做不成的,就怕不能坚持

不过总体来说,有几点看法【从程序猿角度】
1、个人认为前期需求和设计很重要,整体把握好方向,一来简化开发,二来方便后期维护。
2、还是应该有个技术扎实的技术人员来牵头,基础框架的搭建和设计需要做好。
3、要做的东西要明确,最终用户群是些什么人,有什么样的知识,用户体验比较重要。
4、业务逻辑和流程、模块划分,功能划分,各个功能模块的主次关系,重要的需要先做,不重要的上线后开始做也没关系,这些最好先定下来,讨论分析讨论总结,不要急着开发,整体说来开发其实占整个系统很小一部分。

——————----
1 楼 tommywdl 2011-08-17  
几乎没发过贴,今天把楼主的该系列帖一口气看完了 很钦佩楼主创业精神,!up

相关推荐

    Java模式设计之多态模式与多语言支持

    ### Java模式设计之多态模式与多语言支持详解 #### 引言 本文将深入探讨在实际项目中如何运用多态模式以及如何实现多语言支持。案例来自于一个面向全球消费者的华尔街金融网站项目,该网站需要支持至少19种语言,...

    计算机后端-Java-图解java设计模式030 单例(静态代码.avi

    计算机后端-Java-图解java设计模式030 单例(静态代码.avi

    计算机后端-Java-图解java设计模式029 单例(静态常.avi

    计算机后端-Java-图解java设计模式029 单例(静态常.avi

    java 页面静态化

    Java页面静态化是一种提高网站性能的技术,它将动态生成的网页转换为静态HTML文件,以减少服务器处理和数据库查询的时间,提升用户体验。这种技术在高访问量、数据更新不频繁的网站中尤其适用。 首先,我们需要理解...

    graalvm-ce-java11-linux-amd64-21.0.0.2.tar.gz

    1. 多语言支持:GraalVM不仅支持Java,还支持JavaScript、Ruby、Python、R、LLVM等多门编程语言,通过统一的运行时环境,实现跨语言交互。 2. 高性能:GraalVM引入了即时编译器(JIT)和静态编译器(AOT),其中...

    有关Java页面静态化

    总的来说,Java页面静态化是提升Web应用性能的有效手段,通过合理设计和实施,能够为用户提供更快的加载速度和更流畅的浏览体验。同时,它也有利于SEO优化和系统的可扩展性。在实际项目中,需要根据需求和资源选择...

    mysql-connector-java-5.1.40.zip和mysql-connector-java-5.1.10.jar

    MySQL是世界上最受欢迎的开源数据库系统之一,而MySQL Connector/J是MySQL官方提供的用于Java应用程序与MySQL数据库之间连接的驱动程序。本文将深入探讨这两个文件:"mysql-connector-java-5.1.40.zip" 和 "mysql-...

    Java web 动态网页与静态网页

    通过这个项目,开发者不仅可以掌握Java Web开发的基本流程,还能深入理解动态网页的原理,以及如何结合MySQL进行数据操作。同时,对于MVC模式的应用和前端页面的构建也会有更实际的了解。这个实践过程对于提升Web...

    Java语言与面向对象程序设计-印旻ppt

    Java语言与面向对象程序设计是计算机科学中的核心概念,尤其对于软件开发人员来说,理解和掌握这一主题至关重要。印旻的PPT深入浅出地讲解了这两个主题,旨在帮助学习者构建扎实的Java编程基础和面向对象的设计思维...

    java之 ------ 几种常见的简单设计模式

    ### Java之几种常见的简单设计模式 #### 设计模式概述 设计模式是一套被广泛采纳的、经过实践检验的代码设计经验总结。它们提供了解决在软件开发过程中经常遇到的复杂问题的标准方法。采用设计模式的目的在于提高...

    4 种主流 Java 静态代码分析工具

    **简介**:PMD是一款多功能的静态代码分析工具,它不仅可以检查代码质量,还可以检测潜在的bug和不必要的代码重复。 **功能**: - **代码质量**:检测未使用的局部变量、死代码等。 - **潜在bug**:识别可能导致...

    基于Java语言的Android Studio闪屏页全屏静态动态权限设计源码

    本项目为基于Java语言的Android Studio开发,专注于设计全屏静态与动态权限的闪屏页解决方案。包含52个文件,其中XML配置文件22个,WebP图片11个,Java源代码4个,Kotlin文件3个,Git忽略文件2个,Markdown文档2个,...

    java-jsp大学生创新创业实践管理计算机毕业设计.zip

    Java JSP技术是Java服务器页面(Java Server Pages)的简称,是一种动态网页开发技术,...通过这样的毕业设计,大学生不仅可以巩固Java Web开发技术,还能提升项目管理和团队协作能力,为未来的职业生涯打下坚实基础。

    JAVA语言程序设计重要复习题库

    - Java不支持静态方法(static方法)作为类及类成员的访问控制符。 - Java方法声明可以使用static关键字表示该方法是静态方法,使用public关键字表示该方法可以被外部访问。 - 抽象方法是仅有方法声明而没有具体...

    面向对象语言Java语言 ---课程设计

    面向对象编程(Object-Oriented Programming,简称OOP)是现代软件...通过这个课程设计,学生不仅能够巩固Java语言的基础知识,还能提高分析问题、设计解决方案以及团队协作的能力,为未来的软件开发工作奠定坚实基础。

    graalvm-ce-java8-linux-amd64-21.0.0.2.tar.gz

    - **多语言支持**:GraalVM不仅限于Java,还支持多种编程语言,提供了统一的运行时环境,简化了多语言应用的开发和部署。 - **高性能JavaScript引擎**:内置的JavaScript引擎名为“Sulong”,能够执行Node.js应用...

    Java中的代理模式--静态代理和动态代理

    Java中的代理模式--静态代理和动态代理 Java中的代理模式--静态代理和动态代理

    《Java语言程序设计》-期末考试试题及答案

    Java语言程序设计是一门深入学习Java编程的基础课程,期末考试试题涵盖了广泛的Java知识,包括语法、数据类型、运算符、类和对象、方法、包、继承等核心概念。以下是根据提供的部分内容解析出的相关知识点: 1. **...

Global site tag (gtag.js) - Google Analytics