请注意,本站并不支持低于IE8的浏览器,为了获得最佳效果,请下载最新的浏览器,推荐下载 Chrome浏览器
欢迎光临。交流群:166852192

如何创建一个支持多语言全球化的应用


Orchard 支持两种本地化方式:
  • 在Orchard应用程序和模块中对文本进行本地化
  • 在数据库驱动的内容项目中进行本地化
本主题介绍这两种本地化功能。

在Orchard应用程序和模块中对文本进行本地化

在Orchard程序中,所有的字符串都是通过一个单例(single T() )方法输出的,single T() 可以查找当前站点所默认语言的语言包。默认情况下,Orchard只包含了英语的语言包,但是你可以添加其他语言的语言包。前台和后台的本地化可以通过 .po 类型文件进行设置。你可以通过下载需要的 .po 文件然后进行一些简单的设置,就可以对你的网站进行语言本地化。
注意:在.NET Framework 程序中,本地化的资源文件一般使用 .resx 文件和satellite assemblies。Orchard则使用更加轻量化的.po 文件。在Orchard中,本地化文件的数量等于模块的数量乘以所支持的语言数量。所以,本地化文件的数量可能增长的很快,并且satellite-assembly 方法不再适用。另外,.po 文件可以按需加载。像.resx 文件一样, .po 文件是一种标准格式,许多工具中都在使用。

安装语言包

方法1:解压zip文件

解压下载下来的.zip文件到网站的根目录。确保解压的路径是在网站根目录下,为而不是压缩文件的目录。当解压的过程中系统提示“是否要覆盖***”时,选择全部覆盖即可。
这是一非常简单的添加语言包的办法,如果你的网站有一些语言包中有,但是实际没有安装的模块的话,那么可能会创建一些你所不需要的目录出来。这并没有什么影响,不过你可以通过第二种方法避免这种情况。

方法2:使用语言管理器(Translation Manager)

语言管理器模块(Translation Manager)可以通过在线库进行安装。
等你安装好之后,就可以使用下面的命令来安装语言包了。install translation c:\temp\fr-FR.zip
这个工具可以自动安装你网站上有的模块的语言文件,而不会安装语言包里有但是网站上没有的模块,这样就会创建多余的目录,有利于保持网站目录的干净。
如果你以后安装了新的模块,那么你可能需要重新运行上面的命令。

改变网站的默认语言

 

改变魔人语言的方法:在后台进入Settings => General 。在Default Site Culture 下面,点击  Add or remove supported cultures for the site。

Cultures 下拉框选择一个语言(例如:fr-FR) 单击添加。这个语言编码就被添加到Cultures this site supports(本站所支持的语言)下了。单击旁边的“x”用来删除一个语言。

完成后,进入管理菜单。
在默认语言列表下,选择一个语言作为默认,然后保存。

如果已经添加了对应语言的.po 文件,那么就可以看到界面上的文字已经改变成你设置的语言了。下面是fr-FR的截图
注意:有语言文件可能只完成了部分词语的翻译。

设置一个默认语言不会有任何影响,除非你已经安装了类似的语言包。Orchard通过以下方式检索语言文件:
  • Core localization file path ~/Core/App_Data/Localization/<culture-code>/orchard.core.po
  • Modules localization file path ~/Modules/<module-name>/App_Data/Localization/<culture-code>/orchard.module.po
  • Theme localization file path ~/Themes/<theme-name>/App_Data/Localization/<culture-code>/orchard.theme.po
  • Root localization file path ~/App_Data/Localization/<culture-code>/orchard.root.po
  • Tenant localization file path ~/App_Data/Sites/<tenant name>/Localization/<culture-code>/orchard.po

已经存在的语言包

你可以从http://orchardproject.net/localize  下载你需要的语言包,这些内容是orchard社区提供的。如果你没有找到需要的,请考虑花几小时自己制作一个,然后放到社区与大家共享。

贡献一个语言包

使用一个文本编辑器

使用Orchard的多语化工具可以创建一个空的语言包结构。登陆http://orchardproject.net/Localize, 选择你想要创建的语言,然后点击 Create。将会跳转到对应语言的界面上去,当这个页面可能是空的,点击Download the PO files下载。
下载下来的压缩文件包含了需要的.po文件,可以使用任何文件编辑器编辑这些文件。当翻译完成之后请附带一个清单发到join-orchard-localization@lists.outercurve.org邮箱。
请确保保存的格式为UTF-8。文本编辑器都可以选择保存格式,例如记事本可以在“另存为”的时候选择编码为UTF-8。

 

翻译文件

 

下面的插图展示了翻译文件的样子。每个字符串通过一个节点表示。如下:
引用文件#: reference-string
ID,ID设置好之后不要轻易改变,即使实际当中使用的英文字符串变化了,这样可以确保已经存在的翻译文件可以继续使用。#| msgid id-string
当前ID的英文翻译。这对于其他发的翻译人员有好处。msgid English-string
你的语言的翻译。msgstr translated-string

Resource String Reference

The reference for a resource string in a .po file (the reference-string value described in the previous section) is optional. If no reference is specified, the resource string will be used as a fallback whenever a resource with the same ID is queried with a reference that can't be found. This is a useful way to create generic resource strings that are used in multiple places in the application and are not context-sensitive. You can always override a generic fallback like this as needed.
The reference strings can be stored in different locations, depending on how the string is used in the application:
  • Strings from views: Use the virtual path of the view from the root of the application (for example, ~/Themes/TheThemeMachine/Views/User.cshtml).
  • Strings from .cs files: Use the fully qualified type name of the class where the string is being used (for example, Orchard.Packaging.AdminMenu).
  • Strings from module manifests or theme manifests: Use the virtual path of the manifest from the root of the application (for example, ~Themes/TheThemeMachine/Theme.txt). Note that module and theme manifest localization uses a path for fields as the key. For example, the Author field uses the key Author and the Description field of the Gallery feature would be under the key Gallery Description.

使用在线翻译工具

Working with the online translation tool

你可以在线进行翻译,前提是你有一个能够修改在线翻译账号,或者这个很简单,注册个账号然后给orchardfeedback@outercurve.org发个邮件就行了。
登陆之后进入这个链接http://orchardproject.net/Users/Account/LogOn?ReturnUrl=%2flocalize,你就会被导航到一个翻译工作当中去。
在左侧,可以看到core, modules, themes(内核,模块,主题)。选一个就行了。

下面的图展示了每个字符串所在位置和翻译的结果(如果已经被翻译的话)。

每个颜色代表的意义:


  • 深灰色:已经翻译过了
  • 橘黄色:已经被翻译过了,但是这个字符串在程序中没有,通常你可以把它删掉。
  • 红色:还没有被翻译过,这时就需要你了。
在每个字符串的右边你可以看到“edit”按钮(编辑),当然在橘黄色的右边还可以看到一个“Delete”按钮(删除)。
点击删除之后会填出确认提示框。

点击编辑之后会出现下面的编辑界面,你可以修改或创建一个翻译。

快捷键

因为翻译工作是一个重复性工作,所以我们在这个工具里添加了快捷键操作,这样你就可以不动一次鼠标的翻译完一整个文件。
  • 切换到下一个编辑按钮,使用 Tab键(返回上一个使用 SHIFT+Tab)。
  • 切换当前字符串的编辑模式,使用空格键。
  • 在编辑器里面使用 CTRL + 回车 可以保存,Esc键可以取消并退出。
 

翻译第三方模块Contributing files for third party modules

如果你制作了一个模块,你可以通过Translation Manager工具创建你所需要的po文件。
比如我要创建一个“Bing.Maps ”模块的po文件,可以使用以下命令:From an Orchard command line, type the following command (for the example of the Bing.Maps module):
extract default translation /Extensions:Bing.Maps /Output:\temp

这样就会为你的模块创建一个Orchard.en-us.po.zip 文件。这个命令会遍历模块,自动创建T-wrapped 字符串,明显的字符串和其他需要本地换的字串清单。
在数据库驱动的内容项目中进行本地化

Localizing Database-Driven Content Items

除了应用程序和模块的本地化,Orchard 提供翻译的内容存储在数据库中的项目的能力。使用本地化内容的项目,您必须启用本地化功能。在仪表板中,单击“模块”,然后“功能”标签上,你会看到“Enable”。单击“启用”链接。

默认情况下PageBlog Post  是支持本地化的,因为它们包含Localization 部件。如果其他内容类型需要本地化,那么添加Localization 部件到该类型上即可。点击后台导航栏的Content (内容),在Manage Content “编辑内容”里面添加新部件。启用本地化模块之后,在任何类型上都可以+ New Translation“添加新翻译”。 

注意:只有在启用Localization “功能”并且设置了一个以上语言的时候才行。
点击+ New Translation “添加新翻译”之后,就可以设置该文章的其他语言版了。在系统中同一片文章每个语言版本都被当做一份独立的文件。新语言版本设置好之后会拥有独立的URL链接,可以通过网站前台切换语言。

保存之后,个版本的翻译是靠地址后缀来区分的。
当你浏览网站内容时,如果有对应的翻译版本,那么就会显示出链接来。这很方便用户在多个语言之间切换。线面就是一个查看英文内容的例子:

点击右边红色方框里的链接。Click the culture code link to see translated version of the page. When you do, the original cultural code (en-US) appears as a link to the original page.

自定义的内容也可以支持本地化,只要你在添加内容的时候选择上Localization “本地化”部件。

关于如何创建自定义类型,请参考:Creating Custom Content Types
注意Note 本地化功能目前还不是很完善,并不是所有程序所有部分都能被本地化。例如,Orchard 还不能够自动切换到适合的语言(譬如浏览器已经设置了默认语言的情况)。目前你可以在你的模块中继承ICultureSelector 接口来实现。

作者原创内容不容易,如果觉得内容不错,请点击右侧“打赏”,赏俩给作者花花,也算是对作者付出的肯定,也可以鼓励作者原创更多更好内容。
更多详情欢迎到QQ群 166852192 交流。