我的技术设计多语言网站有哪些缺点?

3

我正在设计一个多语言网站,它支持 ltrrtl 两种文本方向。

  1. Language:

    I stored languages in arrays like this $lan=array('browse'=>'تصفح','add'=>'إضافة','signin'=>'تسجيل دخول'); and saved them in separate php files and I include the selected language. I use it within the HTML codes like <?php echo $lan['browse'];?>

  2. direction:

    Most of direction issues can be solved by the CSS property dir. However, sometimes you need to specify different properties for different directions. Therefore, I gave the body a class name which is either "rtl" or "ltr" and then I use it as the following:

    .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;
    }  
    

这种技术有什么缺点吗?例如,大型数组会产生不良影响吗?


2
你可以查看Zend的这个网站,他们解释了很多方法。http://framework.zend.com/manual/1.12/en/zend.translate.adapter.html - Perry
你可能想在CSS中使用选择器,例如.brs_search_box[dir="ltr"] { something }.brs_search_box[dir="rtl"] { something else } - Voitcus
3个回答

4
你可能会遇到的唯一问题是,如果你没有明确地翻译你正在输出的每一部分文本,例如,你可能会使用echo $lan['this is some text'];,但如果你还没有翻译这段文本,它将显示为空白,除非你设置了某种默认文本回退方案。
我使用过的最好的PHP多语言网站系统之一是gettext,你可以在以下链接的PHP手册中查看: http://php.net/manual/en/book.gettext.php 我承认,当我第一次开始使用它时,它不是那么直观易懂,你需要一些额外的工具来让它运行起来,但一旦你学会了并设置好它,我认为它非常有效,并且你也会有一个新的技能来应对未来的生产。
基本上,你只需将所有文本包装在__()函数中,例如__('This is some text'),然后它会搜索你的翻译文件并显示相关的文本。
这将把所有内容分开成单独的文件,你可以很容易地使用它们来翻译文本。这也对于交给翻译公司/朋友/邻居的猫进行翻译而不触及任何你的应用程序文件非常有用。
此外,如果它没有找到指定文本的翻译字符串,它就会将其作为__()函数中提供的内容输出。
这使得添加新语言变得非常可扩展。
我认为还有其他可供你查看的选项,并且你的方法也可以工作,但对于一个被业界接受的、可扩展的方法,看看gettext可能是个好主意。

3
你需要的是一个合适的工具链来处理翻译。你的数组是否支持复数形式?上下文?领域?类别?注释?最重要的是,它们是否支持自动提取?
如果你只是手动将每个新字符串添加到数组中,那么每次添加新字符串都需要大量的工作。对于翻译系统来说,支持完全自动化提取字符串非常重要。你只需在源代码中标记字符串,运行脚本,就可以自动获得可翻译字符串的文件。每次运行时,文件都会更新并与源代码的最新更改合并。如果没有这个功能,这个过程很快就会变得难以管理。
此外,由于你可能需要与外部非技术翻译人员合作,所以使用各种工具都能很好地支持的字符串格式也很重要。
正如@Peter指出的,gettext和其他类似的成熟工具都有这些功能。但你的数组却没有。

1
使用语言数组的想法很好。但是根据经验,我建议两种技术:
语言配置文件。例如,您可以有en_gb.php和arabaic.php,每个文件都包含一个翻译数组。这些文件可以根据用户的语言偏好或IP地址进行预加载,这种技术几乎没有限制,因为翻译保存在一个中央位置,并且您可以添加任意数量的语言,例如french.php。
数据库。您可以按自己的设计来设计它,但理想情况下,您将拥有一个表,其中包含模板单词的列以及每个翻译的列。由于这个表不太可能经常更改,所以您可以使用基于磁盘或基于内存的缓存来提高速度。
使用上述任何一种技术,您只需要使用模板系统并在页面加载时插入相应的翻译即可。但是从经验来看,我建议在两种语言中彻底测试网站,因为不可能逐字逐句地翻译语言。在一种语言中需要200px来显示的内容,在另一种语言中可能需要400px。因此,网站必须考虑到这一点而进行设计。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接