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代码中使用它,如

  • 方向:

    大多数方向问题都可以通过CSS属性
    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}