【问题标题】:Are there cons of my technique for designing multilingual websites我设计多语言网站的技术有什么缺点吗
【发布时间】:2013-03-21 09:38:16
【问题描述】:

我正在设计一个多语言网站,它同时支持ltrrtl

  1. 语言:

    我将语言存储在像 $lan=array('browse'=>'تصفح','add'=>'إضافة','signin'=>'تسجيل دخول'); 这样的数组中,并将它们保存在单独的 php 文件中,我 include 选择了语言。我在 HTML 代码中使用它,例如 <?php echo $lan['browse'];?>

  2. 方向:

    大部分方向问题都可以通过 CSS 属性dir 解决。但是,有时您需要为不同的方向指定不同的属性。因此,我给了 body 一个类名,要么是“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;
    }  
    

这种技术有缺点吗?比如大尺寸的数组会不会有不好的影响?

【问题讨论】:

标签: php css web multilingual


【解决方案1】:

您缺少的是用于处理翻译的正确工具链。你的数组支持复数吗?语境?域?类别?注释?最重要的是:它们是否支持自动提取

如果您只是手动将每个新字符串添加到数组中,那么您添加的每个新字符串都需要大量工作。翻译系统支持全自动提取字符串很重要。您只需在源代码中标记字符串,运行脚本并自动获取带有可翻译字符串的文件。每次运行它时,文件都会更新并与源代码中的最新更改合并。没有这个,这个过程很快就会变得难以管理。

此外,由于您将来可能需要与外部的非技术翻译人员合作,因此具有多种工具都支持的格式的字符串非常重要。

正如@Peter 指出的那样,gettext 和类似的已建立工具具备所有这些。你的数组没有。

【讨论】:

    【解决方案2】:

    使用语言数组的想法很好。但是根据经验,我建议使用 2 种技术:

    语言配置文件。所以你会说 en_gb.php 和 arabaic.php 并且每个都包含一个翻译数组。然后可以根据用户的语言偏好或 IP 地址预加载这些文件,这种技术非常无限,因为翻译保存在一个中心位置,您可以添加任意多种语言,即 french.php

    一个数据库。您可以按照自己的意愿进行设计,但理想情况下,您将有一个表格,其中包含模板词列和每个翻译列。由于此表不太可能经常更改,因此您可以使用基于磁盘或基于内存的缓存来提高速度。

    使用上述任何一种技术,您只需使用模板系统并在页面加载时插入相应的翻译。但是根据经验,我建议用两种语言彻底测试网站,因为不可能逐字翻译语言。以一种语言显示需要 200 像素的内容,在另一种语言中可能需要 400 像素。所以网站的设计必须考虑到这一点。

    【讨论】:

      【解决方案3】:

      您可能会发现的唯一问题是,如果您没有明确翻译您正在回显的文本的每个部分。

      例如,您可以echo $lan['this is some text'];,但如果您还没有翻译此文本怎么办?如果您没有为默认文本设置某种回退,这将在屏幕上显示为空白。

      我使用过的 PHP 多语言网站的最佳系统之一是 gettext,您可以在以下链接的 PHP 手册中查看它:

      http://php.net/manual/en/book.gettext.php

      我承认,当我第一次开始使用它时,它的设置并不那么直观,您需要一些额外的工具来启动它,但是一旦您学会并设置它,我认为它的效果非常好而且你的弓上也会有一根新弦,以备将来制作。

      您基本上将所有文本包装在函数__() 中,例如__('This is some text'),然后它会搜索您的翻译文件并显示相关文本。

      这会将所有内容分成单独的文件,然后您可以使用这些文件轻松翻译文本。这对于将翻译公司/朋友/隔壁邻居的猫交给翻译而无需他们接触您的任何实际应用程序文件也很有用。

      此外,如果它没有找到您指定文本的翻译字符串,那么它只会按照__() 函数中提供的方式输出它。

      这使得随着时间的推移添加新语言变得非常可扩展。

      我认为您也可以查看其他选项,并且您的选项会起作用,但对于行业接受的可扩展方法,查看gettext 可能会很好。

      【讨论】:

        猜你喜欢
        • 2011-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-16
        • 2018-04-22
        • 1970-01-01
        相关资源
        最近更新 更多