Orchard创建全局应用

Orchard的本地化管理托管于一个外部服务(Crowdin),这个项目是公开的且欢迎大家做贡献。

Orchard支持两种类型的本地:

  • Orchard应用程序以及已安装模块中的文本字符串的本地化(其实对于我们来说就是汉化)

  • 数据库驱动的内容条目的本地化

本篇内容主要介绍这两个特性。

本地化Orchard应用程序与模块

Orchard中的所有字符串都是通过方法T()输出的,你可以把看成是基于默认网站文化(语言更合适)翻译过来的字符串。默认情况下,Orchard包含英文字符串,你可以添加其它的。控制面板UI以及所有静态字符串的翻译都可以从前端添加翻译文件(.po格式)到应用程序中。要为一种文化本地化一个网站,你就需要下载并安装合适的.po文件,然后更新网站的配置(下边有讲解)。

注:在.NET框架的程序中,本地化常常使用.resx文件和附带的程序集来实现。Orchard采用了一个更轻量级的方法,那就是使用.po文件。在Orchard中,多数翻译模块中的翻译文件是被多数支持的文化增加的。这个数量可能增长很快,附属程序集设计时并不能作为这个用途。另一方面,.po文件可以快速的加载或卸载。.resx文件和.po文件

安装翻译文件

例子,下载一系列.po法语翻译文件。链接如下:

https://crowdin.net/download/project/orchard-cms/fr.zip.

单击链接下载.po文件和保存.zip文件到电脑上。

方法1:解压zip文件

解压下载到的.zip文件到网站的根目录。确认解压到了Orchard根目录的文件夹中,而不是子文件夹中。如果位置正确,会提示“Confirm Folder Replace”就是替换的窗口,那肯定是选择替换了,然后就会合并了所有文件。

这种方法简单,但是网站只有一种翻译包,这种方法,显示比较二,如果想要两种语言包,你得自己备份到其它文件目录中,其实还是第二种靠谱点。

方法2:使用翻译管理

翻译管理功能可以从Gallery中获得,在Vandelay Industries module模块中,这种方式安装非常轻便,用的是命令行方式。

如果这个模块你安装了,也有了po文件,那你直接可以输入下边的命令就行了,当然路径得换成你自己的:

install translation c:\temp\fr.zip

这种方式只是提取了实际翻译需要的模块资源。如果没有此模块,运行命令也不会产生目录,所以Orchard还是很干净的。

如果以后要安装额外的模块为已经存在的翻译包,重新运行命令就行了。

切换站点到另一种文化

进入“Cultures”界面,从添加文化的列表中选择一个(例如,fr_FR),然后点击添加。文化代码就被添加到了网站支持文化下面。要移除的话,点右边的x就可以了。

添加完成之后,点击管理设置进入设置界面,在默认网站文化列表中,选择一个设置成默认的。然后保存。

假设你安装的.po文件一切正常,那么你在管理界面和菜单中应该可以看到效果。接下我们就可以看到改变到fr-FR文化的效果。

如果你没有一个相应的文化翻译文件安装,设置默认的网站文化到一个指定的文化将没有任何影响。Orchard提供了以下路径来找到翻译文件,多少细节如下:

核心本地化路径:~/Core/App_Data/Localization/<culture-code>/orchard.core.po

模块本地化路径:~/Modules/<module-name>/App_Data/Localization/<culture-code>/orchard.module.po

主题本地化路径:~/Themes/<theme-name>/App_Data/Localization/<culture-code>/orchard.theme.po

根目录本地化路径:~/App_Data/Localization/<culture-code>/orchard.root.po

租户本地化路径:~/App_Data/Sites/<tenant name>/Localization/<culture-code>/orchard.po

翻译有效性

你可以从http://orchardproject.net/localization下载另外的.po文件为其它文化做翻译。这些翻译都是社区提供的。如果没有你想要的文化,你可以考虑贡献一个。用不了多少时间,却可以贡献整个社区。

贡献新的翻译

用一个清楚的文本编辑器

https://crowdin.net/project/orchard-cms上有一个本地化工具可以用来准备存根文件。Orchard的翻译都保存在压缩包中的PO格式的文件中,你可以自己添加你的实例。这些包会在每个小时的开始重新生成(一般需要2-3分钟)。请访问Crowdin的主页看看每种语言的翻译进度。

你可以下载每种语言的所有翻译为所有的项目:Orchard CMS, Orchard CMS Gallery.

下载的.zip文件包含.po文件的集合,可以用文本编辑器打开。修改完之后可以发email到join-orchard-localization@lists.outercurve.org,然后发送压缩包到列表中send the zipped package of .po files to the list

请确保.po文件是以UTF-8文件格式保存。这个其实在你的文本编辑中设置即可(Notepad在另存为下有的编码下拉列表)。

翻译文件格式

下面是个翻译文件的格式。每个文本字符串都如下表所示:

 


A reference (see below)#: reference-string
An ID, which is often the original (untranslated) string. After the ID is set, this string should not be changed even if the English string changes, so that existing translations continue to work even if they're not immediately updated.#| msgid "id-string"
The current English string for reference. This helps the translator.msgid "English-string"
The translated string.msgstr "translated-string"

怎么贡献

  • 在Crowdin上注册。

  • Orchard CMSOrchard CMS Gallery项目页面上参与项目。

  • 你的应用程序将会很快被接受,同时你将以所选语言的校对员的身份加入项目中。这就意味着你可以编辑和验证翻译(这个非常有必要)。

  • 你如果是新来的,那请与其它同语言的翻译者讨论讨论,以确保大家采用同一协定(就是说不要你说yes是“是”,有人说”不是“)。

资源字符串参考

在.po文件中的资源字符串作为参考是可选的。(看看上边的表格就明白了)如果没有参考被指定,如果没有参考被指定,资源字符串将作为备选,以免有ID被查询时找不到了。这样做可以使得创建的字符串用在多个地方而不出错,而对于这个备选的你想什么时候改,什么时候改。

参考字符串可能存在不同的地方,主要看它们是干什么用的:

查看字符串:用在应用程序的根视图的虚拟路径中(例如,~/Themes/TheThemeMachine/Views/User.cshtml

.cs文件中的字符串:用于类的完整类型名(例如,Orchard.Packaging.AdminMenu)。

模块清单或主题清单的字符串:用在应用程序根的清单上的虚拟路径中(如,~Themes/TheThemeMachine/Theme.txt)。注意模块与主题清单的本地化使用了字段路径作为关键字。例如,作者字段用了”Author“,Gallery的描述字段用了关键字”Gallery Description“。

为第三方模块贡献文件

我们的本地化基础架构主要是三个模块组成。如果你是一个模块的作者或者想为一个模块贡献翻译,那么你可以用翻译管理模块生成po文件。通过命令行,也可以参考下边的命令(以Bing.Maps为例):

extract default translation /Extensions:Bing.Maps /Output:\temp

这将为本模块的字符串创建一个新的Orchard.en-us.po.zip文件。本命令的源码创建了T封装字符串、清单字符串和其它需要本地化的所有东西的条目。

请发送这个文件到join-orchard-localization@lists.outercurve.org以便我们把它添加到在线数据库。

数据库驱动的内容本地化项目

除了应用程序和模块本地化,Orchard也能翻译保存在数据库中的内容条目。要想本地化内容条目,你得开户Localization功能。在控制面板中,点击Modules,然后在Features选项卡上找见Localization,点Enable就行了。

默认情况下,页面与博客文章的内容类型都是可以本地化的,因为它们都包含本地化部分(功能)。你也可以添加本地化部分到其它想要翻译的内容类型。点击Content,然后查看管理内容(Manage Content),每个内容条目都有一个“+ New Translation”链接。

注意:这个链接只会在你有超过一个文化开启时同时还得开启Localization属性。

点击了“+ New Translation”链接之后,允许你定义一个与父内容条目(在默认文化中的)相关的内容条目的已翻译版本。在系统中,每个已翻译的内容条目都会被看作一个独立的内容条目。在“Translate Content”界面,你可以为内容条目添加文化代码。为了确保每个翻译链接的唯一性永久链接将被改变。然后你就能从默认的网站文化翻译到所选文化。

添加一些文本到页面主体中,然后点击保存。在保存之后,现有的文化代码是被指定的,同时在不同的文化中也有链接到相关的内容条目。

当在网站上显示内容条目时,如果一个内容条目有翻译可用,那么到这些内容条目的链接会显示。这使得网站访问者易于在翻译之间切换。下面的效果是当你看英语条目时(也就是可以从英语翻到法语):

单击这个链接代码可以看到页面被翻译后的版本。这时在右边链接上显示的当然就是en-US了。

为了开启自定义类型的本地化,需要给内容类型添加Localization部分。例如,添加本地化给MyEvent这个自定义内容类型,点击控制面板上的”Content”,然后点击“Content Types”选项卡。单击“Edit”(假设自定义类型已经存在).点击类型的“Parts”上的“Add”。添加界面就出来了,你可以选择“Localization”或其它的。

 

关于自定义内容类型的其它相关操作,你可以参考Creating Custom Content Types

注意:本地化是过程性工作。不是所有的Orchard应用程序都可以本地化。例如,Orchard不提供自动过滤和显示给定文化内容类型的方法(这是浏览器默认文化的实例)。我们在将来的版本可能实现它。与此同时,你可以在一个模块中提交你自己的ICultureSelector。假如你想要给我们留言表示支持本地化工作(例如,帮助我们了解在你的网站应用场景中哪些是重要的),那么请你发join-orchard-localization@lists.outercurve.org

翻译一个Html部件(Widget)

注意:下面的这些步骤可以使用默认主题的“The Theme Machine”清除安装。

在管理页面,在Modules中确认下Localization模块安装并开启了。然后到Content中。选择Content Types选项卡然后点击Edit来调整Html Widget。我们目的是翻译一个Html Widget。单击Add Parts。在这选Localization然后保存。然后再点页面底下的Save来保存内容条目的更改。

现在到Settings菜单下。选择Default Site Culture,在这里添加你想要支持的文化。在我们的案例中有nl-BE和en-US.点击保存应用文化设置。

导航到Widgets菜单。在Default层找到FooterQuadThrid然后点击Add来添加一个部件。现在你需要选择Choose A Widget,然后选Html Widget,这是我们调整的那个。现在填充需要的信息(标题和内容)然后保存。你的Html 部件已经被添加到了FooterQuadThird选区。现在我们准备翻译这个条目。选择你新添加的widget来编辑。在Edit Widget页面的顶部,你将会发现+ New translation。点击这个可以添加另一文化的翻译。