[译]:Orchard网站内容管理——创建全球通用应用

返回目录索引
原文链接:Creating Global-Ready Applications
本文主要内容为本地化配置,同时介绍了如何为社区本地化项目提供贡献。

Orchard的本地化管理内容托管在外部服务商——Crowdin,此项目是公共使用的,并欢迎贡献内容的。本地化项目地址:Orchard CMS

Orchard支持两种本地化内容:

  • Orchard网站应用和内置模块的字符串文本本地化处理
  • 数据库驱动内容项的本地化处理

关于以上两种本地化处理的功能特点,本文都将介绍。

本地化Orchard应用和功能模块

Orchard应用中所有的字符串都一个独立的T() 方法输出 —— 以此控制字符串被翻译为网站默认语言。默认情况下,Orchard中包含英语(en-US)字符串,但是你可以添加额外的支持语言。控制面板界面和所有前段使用的静态字符串都可以通过导入 .po 格式的翻译文件进行翻译处理。要本地化网站为特定语言,你需要下载并安装对应的 .po 文件,然后按照本节所述,更新你的网站配置。

注意 在.NET Framework 应用程序中,本地化处理常用 .resx 文件与附属程序集。Orchard使用了一个更轻量级的方法——使用 .po 文件。在Orchard中,翻译文件的数量是模块数量乘以支持的语言数量。翻译文件的数量可能快速增长,而附属程序集的设计不适合那种用法。另外,.po 文件可以按需装载和卸载。和 .resx 文件一样, .po 文件同样在许多工具中使用。

安装翻译文件

举例来说,下载一组简体中文(zh-CN) .po 翻译文件。浏览以下地址获取翻译文件:

https://crowdin.com/download/project/orchard-cms/zh-CN.zip

点击链接下载 .po 文件,将 .zip 文件保存到你的计算机。

方法 1: 解压zip文件

解压下载的 .zip 文件到网站的根目录。确保你确实直接解压到网站根目录,而不是在一个名字为 .zip 文件名的子文件夹。当系统提示确定覆盖文件夹——Confirm Folder Replace 以及合并相同名称文件夹内容询问时,选择 全部使用相同操作——Do this for all current items 并点击 是——Yes 来合并翻译文件。

此方法将解压的翻译文件添加到网站翻译文件目录中是非常简单的,但是,如果你的网站的模块相比于翻译文件中的少,你可能会有一些多余的目录。为避免这种情况,你可以尝试以下替代方案。

方法 2: 使用翻译管理功能

翻译管理功能在 Vandelay Industries 模块中,可以从功能库中获取,它利用命令行来精简翻译文件的安装。

一旦有心的模块安装后,你想要添加新的 .po 翻译文件,输入以下命令,必要时替换为po文件的文件路径:

install translation c:\temp\fr.zip

这仅会解压那些已安装模块而又已经翻译的资源内容。如果模块没有找到,执行命令不会创建不必要的目录,这样你的Orchard网站仍然干净。

如果你后面添加新的模块,又有对应的翻译内容,你可能需要重新执行下命令。

切换网站语言环境

在控制面板中点击设置打开综合设置界面,配置网站默认语言环境。在默认网站语言——Default Site Culture下,点击Add or remove supported cultures for the site.

语言设置页面,在 Add a culture 列表中选择一种语言 (如:zh-CN) 然后点击 Add。支持语言对应的代码会被添加到Cultures this site supports下面。可以点击支持语言后的 x 按钮移除此语言支持。

在添加完语言支持后,点击控制面板中的设置返回到综合设置界面。

Default Site Culture 列表中,选择需要设置为默认的语言,完成后点击Save

如果你安装了合适的 .po 文件集,应用新的语言设置后,控制面板的菜单和界面文本将会翻译为对应的语言。下图展示将语言设置为 fr-FR的效果。

注: 此翻译文件可能没有翻译完。

单纯设置网站语言不会有任何效果,除非安装了对应的翻译文件。Orchard从以下几个路径搜索翻译文件(从整体公用的部分到具体的内容部分):

  • Core本地化文件路径 ~/Core/App_Data/Localization/<culture-code>/orchard.core.po
  • Modules本地化文件路径 ~/Modules/<module-name>/App_Data/Localization/<culture-code>/orchard.module.po
  • Theme本地化文件路径 ~/Themes/<theme-name>/App_Data/Localization/<culture-code>/orchard.theme.po
  • Root本地化文件路径 ~/App_Data/Localization/<culture-code>/orchard.root.po
  • Tenant本地化文件路径 ~/App_Data/Sites/<tenant name>/Localization/<culture-code>/orchard.po

翻译可用性

你可以从http://orchardproject.net/localization 下载其他语言的 .po 文件。翻译内容由社区维护。如果你没有找到你需要的支持语言,你可以考虑自己贡献它。这是个几个小时的事,但有利于整个社区。

贡献新的翻译

利用纯文本编辑器工作

https://crowdin.net/project/orchard-cms 本地化工具为特定语言提供了文件存根。Orchard翻译文件以po文件格式进行存储,你可以添加你自己的Orchard示例。那些语言包在每个小时开始时会重新生成(大概需要2-3分钟)。可以访问项目首页查看每一种语言的翻译进度。

以下两个链接都可以下载所有语言的翻译文件包:

你可以用文本编辑器编辑下载的 .zip 压缩包中的 .po 文件。当你编辑完成,请发送邮件至join-orchard-localization@lists.outercurve.org 订阅我们的本地化邮件列表,然后将 .po 文件打包为 zip压缩包发送至join-orchard-localization@lists.outercurve.org

请确保 .po 文件以UTF-8-BOM格式编码保存。这通常会需要在你的文本编辑器中配置(如:在Notepad,你需要在“Save As”对话框 中的编码下拉框中修改对应的编码)。

翻译文件的格式

下面截图展示了翻译文件的格式。每一个文本都是由下表元素来表示。

描述 使用元素
相关引用 #: reference-string
ID,通常是原始(未翻译的)字符串。一旦ID值设置好后,就算英文字符串修改,这个值也不应该修改。这样尽管它们没有立即更新,但可以保证当前翻译仍然可以工作。 `#
当前的英文参考。有助于翻译。 msgid "English-string"
翻译的字符串。 msgstr "translated-string"

怎样提供贡献

  • Crowdin 网站上注册账户。
  • Orchard CMSOrchard CMS Gallery 项目页申请加入项目。
  • 你的申请很快就会批准,然后你将以你所选语言的“校对员”身份被添加到对应项目。这意味着你可以编辑和校对翻译内容(这是将翻译好的字符串添加到下载包里所必需的操作)。
  • 如果你是Orchard项目新加入的成员,请与其他同语言的翻译者联系,确保你们遵循的是同一个规则。

资源字符串引用

.po 文件中资源引用字符串是可选的 —— (reference-string的信息在上面已经描述过)。如果没有定义引用,它将作为所有具有相同ID资源的备用 —— 如果一个具有相同ID的资源没有找到引用,那么它就取此资源的值。这在创建通用资源字符串(即字符串在多个地方使用且字符串是上下文无关的)时会很有用。这样你可以在需要的时候,随时覆盖通用的备用资源。

引用字符串可以存储在不同的地方,这取决于如何在应用中使用这个字符串:—— ?个人没怎么搞懂 - 待进一步研究?

  • Strings from views: 使用视图的虚拟路径——从应用的根目录开始(如:~/Themes/TheThemeMachine/Views/User.cshtml)。
  • Strings from .cs files: 使用完整的(含有命名空间)类名来找到对应的字符串(例如:Orchard.Packaging.AdminMenu)。
  • Strings from module manifests or theme manifests: 使用清单文件的虚拟路径——从应用的根目录开始(如:~Themes/TheThemeMachine/Theme.txt)。 注意:模块和主题的清单本地化使用路径作为字段的键。例如,Author字段使用键“”“Author”,Gallery功能的Description字段可能使用键值“Gallery Description”。

为第三方模块提供贡献

我们的本地化基础建设是提供托管第三方应用翻译的。如果你是一个模块的作者(开发者)或者你想为一个模块贡献翻译内容,你可以使用 Translation Manager 模块来生成po格式文件。

在Orchard的命令行工具中输入以下命令(以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 链接。

默认情况下,PageBlog Post 两种内容类型都是可以本地化的,因为他们都包含 Localization 部分。你可以将 Localization 部分添加到其他需要翻译的内容类型中。在控制面板中,点击 内容-Content ,然后将可以在管理内容-Manage Content 界面查看内容项。注意:+新建翻译 —— + New Translation 链接是针对每一个内容项的。

注:在新版中Localization模块的名称为Content Localization。同时要出现 +新建翻译 链接,你的网站首先需要配置多个支持语言。

点击 + New Translation 链接允许你定义内容项的翻译版本,并可以关联上相应的“父”级内容项(网站默认语言)。每一个翻译的内容项都是一个独立的内容项存储在系统中。在 翻译内容-Translate Content 编辑界面,你可以定义内容项要使用的语言代码。永久链接内容会根据选择的语言切换对应的链接地址以此保证每个翻译都独立存在。然后,你就可以将内容翻译为选定语言。

在页面的主体部分添加一些翻译内容,然后点击 保存-Save。在内容项保存后,当前语言代码将会显示相应的不同语言的内容项链接。

当在网站上浏览内容项时,如果他又相应的翻译内容,翻译内容项的链接将会一起显示。这样对于你网站的访问者而言,他就比较方便的切换到其他语言。下图是浏览英文内容的示例:

点击语言链接查看相应的翻译版本。当你其他语言版本时,原始语言页面的链接将会显示出来。

要为自定义内容类型启用本地化功能,则添加 Localization 部分到内容类型中。例如:为一个名叫MyEvent的自定义类型添加本地化功能,在控制面板中,点击 内容定义 ,然后在 内容类型-Content Types 标签中,点击 MyEvent 类型的 编辑 链接 (示例假设此自定义类型已经存在)。然后点击 添加元件-Add ,然后在显示的添加元件界面,选择 Localization 或者要添加的其他元件

关于创建自定义内容类型的更多内容见:原文:Creating Custom Content Types

注意 本地化功能是仍在处理的工作,所以在Orchard应用中,不是所有的内容都已支持本地化。例如:Orchard还不支持通过给定Culture(浏览器默认Culture)自动筛选显示指定语言版本。我们会在以后的版本中解决这个问题。在此期间,你可以自己提供模块来实现ICultureSelector。如果你有什么关于本地化支持的内容要反馈给我们(如:帮助我们了解哪些场景对于你网站是比较重要的),请联系 join-orchard-localization@lists.outercurve.org ,并给我们发送相关信息。

翻译 Html 部件

以下步骤适用于全新安装的默认主题’The Theme Machine’

在控制面板中,首先点击 模块-Modules ,然后确认 Localization 模块已经安装并已启用。下一步点击 内容定义 ,定位到 内容类型-Content Types 标签页面,然后点击 Html Widget 后的编辑。我们的目的是翻译Html部件,点击 添加元件,然后选择 Localization 元件并点击 保存-Save 来添加元件。最后在内容类型编辑页面,点击最下面的 保存-Save 来保存内容项的改变。

现在在控制面板中点击 设置-Settings 菜单项。在 网站默认语言-Default Site Culture 中,你可以添加你想支持的语言。在此案例中,我们使用nl-BE 和 en-US。点击 保存-Save 应用语言设置。

点击 部件-Widgets 菜单项。
Default 层找到一个示例区域,如 FooterQuadThrid ,然后点击 Add 添加部件。
现在你需要选择一个部件,选择 Html Widget —— 之前配置的部件。
然后,输入必须的项(标题和内容)并点击 保存-Save
现在你的Html Widget已经添加到FooterQuadThird区域。
接下来准备翻译,选择新添加的部件编辑。在编辑页面顶部找到 +添加翻译 —— + New translation链接。点击它来添加其他语言的翻译。


译:奇葩史

[译]:Orchard网站内容管理——使用Live Writer写博客

返回目录索引
原文链接:Blogging with LiveWriter

尽管Orchard在控制面板中内置了博文编辑功能,但很多人更喜欢使用客户端来写作文章,例如使用Open Live Writer。客户端使用XML-RPC接口远程发布文章,同时提供额外的功能,如保存离线草稿(例如:在飞机上写作你的博文,稍后再同步到你的网站)。

要允许远程发布博客,在控制面板中点击模块——Features

要让Orchard支持Open Live Writer,你需要启用 Remote Blog Publishing 功能——点击Remote Blog Publishing功能块中的启用——Enable 链接。

注:文中图片是Windows Live Write,但Open Live Write是从其衍生过来的,操作基本相同。

现在,在开始 菜单中找到 Live Writer 并启动

点击Blogs菜单里的Add blog account…

选择 Other blog service 并点击 Next.

输入你的Orchard博客的地址,以及安装Orchard时定义的用户名和密码。

注意: 你也可以用其他支持XML-RPC的客户端软件,不过你可能需要提供xmlrpc接口的地址,而不仅仅是博客地址。例如:http://myimaginaryorchardsite.com/xmlrpc

Live Writer会去连接你的博客,同时去判断你的Orchard是否支持XML-RPC功能,以及下载当前网站的主题(用于发布前预览)。如果在连接期间,软件提示你创建临时的博文,在弹出框中选择“Yes”。

Live Writer配置完成后,点击 Finish.

在Live Writer编辑区域,输入标题及博文内容。

你同样可以利用工具栏中的 Insert Picture 按钮,为你的博文插入图片

要自定义博文的链接地址,点击菜单中的 View / Properties

新版操作为:点击工具栏下方最右边的View all

Slug 将显示在编辑下方——用于输入博文所用的路径的一部分。

要预览博文在Orchard当前主题下的的显示效果,点击 Preview 标签。当你觉得调好博文显示后,点击Publish按钮发布

Live Writer会发布你的博文,然后自动在浏览器中打开博文地址以供查看。


译:奇葩史

RSS/Atom开发索引

本文托管地址:http://git.oschina.net/huaxia283611/JustForFeed/tree/master/docs/ThirdPartyAPI.md

RSS阅读器开发信息整合

名称 开源及费用 API 官方支持平台 语言 描述
Feedly 否,高级收费 https://developer.feedly.com/ Web/IOS/Android/Kindle 支持中文
AOL Reader http://reader.aol.com/api Web/IOS/Android 支持中文
NewsBlur 开源,高级收费 http://www.newsblur.com/api Web/IOS/Android 英文
Inoreader 否,高级收费 http://www.inoreader.com/developers/ Web/IOS/Android/WP 支持中文
Reader 开源 http://reeder.io/api 未知 英文 官网已无法访问,应已不在维护,纯粹因为开源整理进来
Feedbin 开源,收费 https://github.com/feedbin/feedbin-api#readme Web 英文

关于其他大部分rss阅读器,很多都是依赖以上几个后台api服务
曾经霸主:Google Reader —— 谷歌服务调整被砍

.NET开发参考

针对win10/UMP开发

其他

  • 由于现在微软.net framework提供了SyndicationFeed订阅信息解析类,故我们自己无需再去专门写解析。

个人开发 - 暂未明确定位,故有时调整会比较大 - 偏向学习

其他内容

关于RSS/Atom

简单理解:RSS与Atom就是两中信息传输格式(XML格式),而且非常相似。虽说Atom像是RSS的进化版本,但我们提到订阅时,更多的会说到RSS(有时还隐含表述了Atom)。
另注:此Atom非Github的Atom,未避免更多的误解,在提及订阅的时候,直接用RSS,而不提及Atom

关于新闻组

关于新闻组,开发相关内容较少,故在此额外添加,以作后续参考
如果你能够去墙外,直接看 Google Groups


掘客:奇葩史

[译]:Orchard入门——使用标签管理内容

返回目录索引
原文链接:Organizing Content Using Tags

在Orchard中,内容项可以使用标签来分类,同时,通过格式为 ~/tags/tag-name 的url可以直接查看包含对应标签关键字的内容项列表。当用户选中某一标签时,浏览器会自动跳转到对应标签的内容项列表。

要在网站中编辑全局的标签列表,点击控制面板-标签进入标签管理界面,然后点击对应的标签修改。

在标签管理界面中,你可以修改或删除标签。当你删除一个标签时,它将从所有使用此标签的内容项中移除。当你修改一个标签时,它会将所有内容项中使用的对应标签修改为新的关键字。这有利于清除部分标签,以此保证网站内标签的一致性。

点击对应的标签关键字,界面将显示使用此标签的所有内容项。


译:奇葩史

[译]:Orchard入门——部件管理

返回目录索引
原文链接:Managing Widgets

在Orchard中,部件是可以加入到当前当前主题任何位置或区域(如侧栏sidebar或底部区域footer)的UI块(如:HTML)或代码部分(如:内容部分)。常见部件示例包括:导航菜单navigation menus, 图片库image galleries, 广告ads, 视频videos, 以及标记云图tag clouds

本文介绍部件的基础知识,以及如何管理部件。

Layers, 区域Zones, 和部件Widgets

在Orchard控制面板中,点击 部件Widgets 菜单进入部件管理界面。Widgets 界面列出了可用的部件列表,以及可以添加部件的层_layer_和区域_zone_。

你可以将层 layer 理解为展示一个部件(或一组部件)的一系列规则。例如:一个层可以控制页面上某一部件只对登录用户可见。区域_zone_控制部件显示在页面的哪一个位置。

下图为部件Widgets 页面:

可用的部件

一旦部件设置可用 (通常是在控制面板-模块-功能下面启用了一个功能后引起), Orchard会自动将部件添加到当前主题区域可用部件列表当中。要查看区域可用部件列表,点击部件界面中区域列表中某一区域后面的添加按钮。

例如:在部件界面中点击 Header 区域后的添加按钮。网站将展示可以添加到区域的可用部件列表。

下面表格描述了Orchard中默认可用的部件:

部件Widget 描述Description
Blog Archives 显示指定博客的博文条目列表
Container Widget 显示内容项容器,例如一个列表
Html Widget 显示HTML内容——需要通过部件编辑器添加内容
Recent Blog Posts 显示指定博客的最近更新博文

层的列表

Orchard内置提供了一些层。你也可以按照自己的需要定义层,稍后将详述**添加层。在部件页面,你可以通过当前层下拉菜单改变当前编辑的层,也可以点击添加一个新层来**来添加新层。

下面列表列举了默认层的显示规则,以及层的作用。

Layer 规则Rule 描述Description
Default true 在所有页面都显示
Authenticated authenticated 用户已认证——即对登录用户可见
Anonymous not authenticated 匿名用户可见
Disabled false 不显示。可用于保存当前不需要显示的部件配置
TheHomepage url(“~/”) 首页显示

区域列表

Orchard中,网页被分成许多个区域。可用区域被定义在网站主题之中。在部件界面,你可以看到当前选中层所有可用区域的列表。界面上也包含当前选中层的每个区域包含的部件。

关于更多默认主题(TheThemeMachine)的可用区域信息,参见:原文:Customizing the Default Theme

添加层

点击控制面板-部件-添加一个新层来添加一个层,下图为 Add Layer 界面:

添加新层信息:层名称、描述,以及层规则,完成后点击保存

层规则的值是一个可以解析为truefalse的表达式。如果解析为 true, 则部件显示,否则部件不显示。

下表简述了建立层的语法规则:

语法规则Rule Syntax 描述Description
url(“<url path>”) 当当前url地址符合指定的路径,则为true。如果在路径最后加了星号(*),所有此路径下的子链都被认为是true(如:url("~/home*"))。
authenticated 用户已登录则为true。
ContentType(“<Type>”) 浏览内容类型与特定的类型匹配,则为true。如:内容类型(“Page”)
not 逻辑非
and 逻辑与
or 逻辑或

表达式可以使用括号。

例如,下面表达式定义的规则表示对于未登录用户可以在About页面查看到部件,登录用户在任何页面都可以看到部件。

(not authenticated and url("~/about")) or authenticated

如 允许多个url值,可以使用如下语法:

url("~/foo") or url("~/bar")

为区域添加部件

点击要添加部件的区域后的添加按钮,然后选择要添加的部件,以此给一个区域添加部件。

例如:点击Header区域后的添加按钮,然后在 Choose A Widget 页面点击 Html Widget。然后网站将展示 Add A Widget 页面

要配置哪些字段取决于你配置的部件类型。所有部件都包含区域Zone, Layer, 标题Title, 和 位置Position 字段。位置字段确认区域内部所有部件的相对位置(事实上就是z-order)。需要注意的是区域内的部件可以来自多个层。例如:两个完全不同的层中可能在统一区域都含有部件。

位置字段可以是整数,也可以是由点分隔的整数序列。例如:以下值都是有效的:5, 10.1, 7.5.3.1。位置值小的部件将显示在位置值大的部件之前。

设置完所有字段后,点击保存

编辑或删除部件

要编辑或删除部件,在部件页面的当前层下拉框中选择部件所在的层。然后在层所含的区域列表中,点击要更改的部件。之后会自动进入编辑部件界面:

编辑你想修改的字段,然后点击保存。要从区域中移除部件,点击后面的移除按钮。


译:奇葩史