Php 我设计多语言网站的技术有缺点吗
我正在设计一个多语言网站,它支持Php 我设计多语言网站的技术有缺点吗,php,css,web,multilingual,Php,Css,Web,Multilingual,我正在设计一个多语言网站,它支持ltr和rtl 语言: 我将语言存储在如下数组中:$lan=array('browse'=>'并将它们保存在单独的php文件中,我将包含所选语言。我在HTML代码中使用它,如 方向: 大多数方向问题都可以通过CSS属性dir解决。但是,有时需要为不同的方向指定不同的属性。因此,我给了主体一个类名,它是“rtl”或“ltr”,然后我使用它如下所示: .brs_search_box{ display: inline-block; width: 19
ltr
和rtl
$lan=array('browse'=>'
并将它们保存在单独的php文件中,我将包含所选语言。我在HTML代码中使用它,如
dir
解决。但是,有时需要为不同的方向指定不同的属性。因此,我给了主体一个类名,它是“rtl”或“ltr”,然后我使用它如下所示:
.brs_search_box{
display: inline-block;
width: 199px;
border: 1px solid #d3d3d3;
height: 500px;
}
.rtl .brs_search_box{
border-left: 0;
}
.ltr .brs_search_box{
border-right: 0;
}
这种技术有缺点吗?例如,大尺寸数组是否会产生不良影响?您可能会发现的唯一问题是,如果您没有明确翻译您正在回音的文本的每一部分 例如,您可以
echo$lan['这是一些文本']但是如果你还没有翻译这篇文章呢?若你们并没有设置默认文本使用的某种回退,那个么它将在屏幕上显示为空白
我使用过的PHP多语言站点的最佳系统之一是gettext
,您可以在PHP手册中的以下链接上查看它:
我承认,当我第一次开始使用它时,它的设置不是那么直观,你需要一些额外的工具来让它运行,但一旦你学会了它并设置了它,在我看来,它工作得非常好,你也会有一个新的弦到你的弓为未来的生产
基本上,您可以将所有文本包装在函数。
,例如。(“这是一些文本”)
,然后它会搜索您的翻译文件并显示相关文本
这将所有内容分离成单独的文件,然后您可以使用这些文件轻松地翻译文本。这对于交给翻译公司/朋友/隔壁邻居的猫进行翻译也很有用,因为他们不会接触任何实际的应用程序文件
此外,如果它没有找到指定文本的翻译字符串,那么它将按照函数中提供的方式输出它
随着时间的推移,它可以很好地扩展以添加新语言
我认为还有其他选项可供您选择,您的选项也可以,但对于一种行业公认的可扩展方法来说,查看gettext
可能会更好。使用语言数组的想法很好。但根据经验,我建议采用两种方法:
语言配置文件。所以你应该说en_gb.php和arabac.php,每个都包含一个翻译数组。这些文件可以根据用户的语言首选项或IP地址进行预加载,这种技术是非常无限的,因为翻译保存在一个中心位置,您可以添加任意多的语言,即french.php
数据库。您可以按照自己的方式进行设计,但理想情况下,您将有一个表,其中一列用于模板单词,另一列用于每个翻译。由于此表不太可能经常更改,因此可以使用基于磁盘或基于内存的缓存来提高速度
使用上述任一技术,您只需使用模板系统,并在页面加载时插入相应的翻译。然而,根据经验,我建议用两种语言彻底测试网站,因为语言不可能逐字翻译。在一种语言中显示200px的内容在另一种语言中可能需要400px。因此,网站的设计必须考虑到这一点。您缺少的是处理翻译的适当工具链。你的数组支持复数吗?上下文域名?类别?评论?最重要的是:它们支持自动提取吗
如果您只是手动将每个新字符串添加到数组中,那么您添加的每个新字符串都有大量的工作要做。翻译系统必须支持字符串的全自动提取。您只需在源代码中标记字符串,运行脚本并自动获取带有可翻译字符串的文件。每次运行它时,文件都会更新并与源代码中的最新更改合并。如果没有这一点,流程很快就会变得难以管理
此外,由于您可能在将来的某个时候需要与外部的非技术性翻译人员合作,因此使用各种工具都支持的格式的字符串是很重要的
正如@Peter所指出的,gettext和类似的已建立的工具具有所有这些功能。你的数组没有。你可以从zend上看看这个网站,它们解释了很多你可能想在CSS中使用选择器的方法,比如.brs_搜索框[dir=“ltr”]{something}
以及.brs_搜索框[dir=“rtl”]{something}