本地化与Atlas对于本地化的支持

  周三我参与的项目的Beta版终于发布了,这个项目是对今年2月已经在美国上线的产品进行本地化工作。很奇怪,在Production环境中使用下来感觉比想象中要好很多,忐忑的心情放轻松了不少。虽然我那个项目没有用到Atlas,不过也就趁这个机会,简单讲一下本地化和Atlas对于本地化的支持吧。

一、什么是本地化

本地化,英文是Localization,缩写为L10n(与之类似的还有Globalization - G11n和Internationalization - I17n),其工作是将一个市场的产品进行某种方式的修改,目的在于向另一个市场的推广。一般来说,这两种市场的语言环境是不同的,因此“翻译”似乎就是本地化工作的重中之重,其重要程度已经达到了让某些人误以为本地化工作完全就是一个翻译工作。其实不然。正像刚才所说的,本地化是为了让一个产品在另一个市场得到推广,因此它需要做的事情还不少:

首先当然最重要的就是文字的翻译。一个产品会有大量的文字信息,在不同的市场中,对于这些文字自然应该翻译成符合该市场语言。翻译后语言应该要保持语句流畅和意义明确。需要注意的是,这里的“文字信息”不单指产品中的“文本”,图片中的文字和以图片方式显示的文字也一样需要被翻译。在ASP.NET中,对于这方面的本地化工作有着很好的支持。

其次是环境的转换。打个比方,在产品中很可能会有关于人的图片,则在美国市场应该显示为美国人,而在中国大陆市场则必须换作中国人——当然,如果用香港台湾韩国日本人可以吗?这……

还要注意的是语言习惯和环境属性。不同的市场往往会有不同的语言习惯和环境属性,比如时间格式、数字格式、货币单位、距离单位、时区、距离单位与标准长度单位的比等等。同样的信息在不同市场的显示出来时会有很大的不同。这里大部分的属性在.NET Framework的System.Globalization.CultureInfo类有描述。而本文也着重于Atlas对于这一点的支持。

不同的市场往往还需要运用不同的样式。姑且不说市场不同语言之间文字的阅读方向会不同,就拿同样是从左往右的两种不同语言,在样式上就会有所不同。比如拿英语与中文来说,首先他们如果用相同的字号,则中文会显得偏小。如果放大一些文字那么文字与边框,边框与边框,文字与图片之间的距离就会显得偏小,也需要一并改变。英文字母所组成的文章会有参差的感觉,而中文汉字基本上都是方块字,同样是文章汉字给人的感觉会比较密。单个英语单词中间不能换行,而中文任意两个汉字之间都能换行,其限制主要在在标点符号上。诸如此类等等。如果是大规模的产品,会涉及到许多产品的本地化工作,会专门成立一个小组用来研究各种语言文字下的样式,并提供开发人员全面的参考。这样保证了同一个,或者同一系列的产品,在不同市场会应用不同样式,却又保持了风格的美观和统一。

本地化工作还包括开发市场特定功能。不同的市场在很多地方会不相同,比如当地的法律限制了有些功能无法发布,有些功能必须修改和标注等等。为了更好地迎合用户,也有可能会为本地用户开发出新的功能。

其他例如还有广告商,赞助商等等,这里就不多说了。


二、Atlas对于本地化的支持

Atlas对于本地化工作的支持主要体现在客户端的Sys.CultureInfo对象。打开Atlas.js文件,可以发现如下的代码:
Sys.CultureInfo  =
{
    
" Name "  :  " en-US "
    
" NumberFormat "  : { ... }, 
    
" DateTimeFormat "  : { ... }
};

代码比较长也比较无聊,因此就不完整贴出了。Sys.CultureInfo对象对于日期和时间的格式有着良好的支持,Atlas的客户端代码对于Date和Number的扩展都是基于Sys.CultureInfo对象的定义,具体代码也可以在Atlas.js文件中看到。那么Atlas是如何支持别的Culture的呢?我们新建一个aspx页面,加入一个ScriptManager,代码如下:
< atlas:ScriptManager  ID ="ScriptManager1"  runat ="server"   />

然后在浏览器中打开这张页面。查看网页的源文件,可以发现这么一段代码:
< script  src ="atlasglob.axd"  type ="text/javascript" > script >

在浏览器里访问这个atlasglob.axd文件就可以查看这个“文件”的内容。它也是一段和上面相似的Sys.CultureInfo代码,只是内容会有所不同(如果相同的话那么访问atlasglob.axd?c=zh-cn就可以看到zh-cn的Sys.CultureInfo内容)。它后与Atlas.js文件加载,因此它的内容会覆盖Atlas.js文件中的定义。这就是Atlas对于本地化的支持。

在ScriptManager中有一个属性EnableScriptGlobalization,默认值为True。如果不需要这个功能,则可以把它设为False,那么页面就不会产生前面的

你可能感兴趣的:(本地化与Atlas对于本地化的支持)