13
最佳实践多语言网站
我已经在这个问题上苦苦挣扎了好几个月了,但是以前我从来没有需要探索所有可能的选择的情况。现在,我觉得该是时候了解各种可能性并建立自己的个人喜好了,以便在我即将进行的项目中使用。 首先让我勾勒出我要寻找的情况 我将要升级/重新开发已经使用了一段时间的内容管理系统。但是,我觉得多语言是对该系统的极大改进。在我没有使用任何框架之前,我将在即将到来的项目中使用Laraval4。Laravel似乎是更干净的PHP编码方式的最佳选择。Sidenote: Laraval4 should be no factor in your answer。我正在寻找独立于平台/框架的一般翻译方式。 应该翻译什么 由于我正在寻找的系统需要尽可能地方便用户使用,因此管理翻译的方法应在CMS内部。无需启动FTP连接即可修改翻译文件或任何html / php解析的模板。 此外,我正在寻找最简单的方法来转换多个数据库表,而无需创建其他表。 我自己想到了什么 我一直在寻找,阅读和尝试自己的东西。我有几个选择。但是我仍然不觉得自己已经达到了我真正追求的最佳实践方法。现在,这是我想出的,但是这种方法也有副作用。 PHP解析模板:模板系统应由PHP解析。这样,我就可以将转换后的参数插入HTML,而不必打开模板并进行修改。除此之外,PHP解析的模板使我能够为整个网站使用1个模板,而不必为每种语言都拥有一个子文件夹(这是我以前使用的)。达到此目标的方法可以是Smarty,TemplatePower,Laravel's Blade或任何其他模板解析器。正如我所说,这应该独立于书面解决方案。 数据库驱动的:也许我不需要再次提及。但是解决方案应该是数据库驱动的。CMS的目标是面向对象和MVC,所以我需要考虑字符串的逻辑数据结构。正如我的模板将被结构化:模板/控制器/ View.php也许这一结构将最有意义:Controller.View.parameter。数据库表将这些字段与字段长在一起value。在模板内部,我们可以使用某种排序方法,例如echo __('Controller.View.welcome', array('name', 'Joshua'))和参数contains Welcome, :name。因此结果是Welcome, Joshua。这似乎是执行此操作的好方法,因为编辑器很容易理解诸如:name之类的参数。 数据库负载低:如果在旅途中加载这些字符串,上述系统当然会导致数据库负载。因此,我需要一个缓存系统,以便在管理环境中编辑/保存语言文件后立即重新呈现它们。由于生成了文件,因此还需要一个良好的文件系统布局。我想我们可以选择languages/en_EN/Controller/View.php最适合的是.ini或.ini。也许.ini甚至可以更快地解析。该数据应包含中的数据format parameter=value; 。我猜这是最好的方法,因为渲染的每个View都可以包含它自己的语言文件(如果存在)。然后,应将语言参数加载到特定视图,而不是在全局范围内加载,以防止参数相互覆盖。 数据库表翻译:实际上,这是我最担心的事情。我正在寻找一种创建News / Pages / etc的翻译的方法。尽快。每个模块都有两个表(例如News和News_translations)是一个选项,但是要获得一个好的系统感觉很费力。有一个问题我想出了是基于对事物data versioning系统我写的:有一个数据库表名Translations,这个表有一个独特的组合language,tablename和primarykey。例如:en_En / News / 1(请参阅ID为1的“新闻”项目的英文版本)。但是此方法有两个巨大的缺点:首先,该表往往会在数据库中存储大量数据时变得很长,其次,使用此设置来搜索表将是一件艰巨的工作。例如,搜索该项目的SEO段将是全文搜索,这真是愚蠢。但另一方面:这是一种非常快速地在每个表中创建可翻译内容的快速方法,但我不认为这会增加缺点。 前端工作:前端也需要一些思考。当然,我们会将可用的语言存储在数据库中,并停用所需的语言。这样,脚本可以生成一个下拉菜单来选择一种语言,后端可以自动决定可以使用CMS进行哪些翻译。然后,在获取用于视图的语言文件或为网站上的内容项获取正确的翻译时,将使用所选的语言(例如en_EN)。 因此,它们在那里。到目前为止,我的想法。它们甚至还不包括日期等的本地化选项,但是由于我的服务器支持PHP5.3.2 +,因此最好的选择是使用国际扩展名,如此处所述:http ://devzone.zend.com/1500/internationalization-in -php-53 / -但这将在以后的开发中使用。目前,主要问题是如何拥有网站内容翻译的最佳实践。 除了我在这里解释的所有内容之外,我还有另一件事尚未决定,它看起来像一个简单的问题,但实际上,这让我头疼: 网址翻译?我们应该这样做吗?又以什么方式? …