我已经在这个问题上苦苦挣扎了好几个月,但我还没有遇到过需要探索所有可能的选择的情况.现在,我觉得是时候了解可能性并创建我自己的个人偏好,以便在我即将开展的项目中使用.
让我先描绘一下我正在寻找的情况
我即将升级/重新开发我已经使用了很长一段时间的内容管理系统.但是,我觉得多语言是对这个系统的一个很大的改进.在我没有使用任何框架之前,我将使用Laraval4进行即将到来的项目.Laravel似乎是更简洁的PHP编码方式的最佳选择.Sidenote: Laraval4 should be no factor in your answer.我正在寻找独立于平台/框架的一般翻译方式.
应该翻译什么
由于我正在寻找的系统需要尽可能用户友好,管理翻译的方法应该在CMS内部.应该没有必要启动FTP连接来修改翻译文件或任何html/php解析模板.
此外,我正在寻找最简单的方法来翻译多个数据库表,而不需要创建额外的表.
我自己想出了什么
正如我一直在寻找,阅读和尝试自己.我有几个选择.但我仍然觉得我没有达到我真正寻求的最佳实践方法.现在,这是我想出来的,但这种方法也有它的副作用.
Controller.View.parameter.数据库表将使用字段将这些字段设置为long value.在模板内部,我们可以使用类似的排序方法echo __('Controller.View.welcome', array('name', 'Joshua')),参数包含Welcome, :name.因此结果是Welcome, Joshua.这似乎是一个很好的方法,因为参数如:name很容易被编辑器理解.languages/en_EN/Controller/View.php或.ini,最适合你的.也许.ini甚至可以在最后解析得更快.这个应该包含的数据format parameter=value;
.我想这是执行此操作的最佳方式,因为呈现的每个View都可以包含它自己的语言文件(如果存在).然后,语言参数应加载到特定视图而不是全局范围,以防止参数相互覆盖.News和News_translations)是一个选项,但是为了获得一个好的系统感觉很多.我想出的一件事是基于data versioning我写的一个系统:有一个数据库表名Translations,这个表有一个独特的组合language,tablename和primarykey.例如:en_En/News/1(参考ID = 1的新闻项目的英文版本).但是这个方法存在两个巨大的缺点:首先,这个表在数据库中有大量数据需要很长时间,其次使用这个设置搜索表是一件很麻烦的工作.例如,搜索项目的SEO slug将是一个全文搜索,这是相当愚蠢的.但另一方面:它是一种快速的方式,可以非常快速地在每个表格中创建可翻译内容,但我不相信这个专业人士会超过这个内容.所以,他们就是.我的想法到目前为止.他们甚至不包括日期等的本地化选项,但是因为我的服务器支持PHP5.3.2 +,最好的选择是使用intl扩展,如下所述:http://devzone.zend.com/1500/internationalization-in -php-53 / - 但这将在任何后期的开发体育场中使用.目前,主要问题是如何在网站上获得最佳的内容翻译实践.
除了我在这里解释的一切,我还有另一件我尚未决定的事情,它看起来像一个简单的问题,但事实上它让我头痛:
网址翻译?我们应该这样做吗?以什么方式?
所以..如果我有这个网址:http://www.domain.com/about-us …
什么被认为是翻译网站的URL的最佳策略?我经常看到的事情是:
http://example.com/english-slug.html
http://example.com/de/english-slug.html
http://example.com/fr/english-slug.html
Run Code Online (Sandbox Code Playgroud)
这具有(次要)优点,即用户可以通过修改URL手动切换到另一种语言.缺点似乎是URL包含错误语言的slug,每个页面都不是默认语言.我想这会导致SEO惩罚.
另一种方法是翻译slug并可选地省略语言标识符:
http://example.com/english-slug.html
http://example.com/deutscher-slug.html
http://example.com/slug-francois.html
Run Code Online (Sandbox Code Playgroud)
有些语言并没有真正让自己变得"迷茫",比如俄语,汉语和阿拉伯语.你最终会得到毫无意义的音译.