在PHP webapp中模板化不同的语言

时间:2013-07-16 12:07:34

标签: php template-engine

我正在用德语编写一个webapp,所以所有按钮,文本,工具提示等现在都是德语。但我想为webapp使用某种模板文件,以便我可以根据需要快速更改为其他语言。我想到了explode"\n"的文本文件,并加载到sessionvariable中,以便始终拥有用户在其会话中需要的所有文本。另一种方法是解析这样的文件,即这样的XML文档:

<?xml version="1.0"?>
<phrase>
    <placeholder></placeholder>
    <value></value>
</phrase>

其中每个字段都有自己的名称/值,表示文本片段或按钮或网站上的任何内容,然后将其转换为对象,并为每个人提供缓存。我认为第二种方法是最适合使用多种语言的webapp。任何人都可能会指出我能做得更好的事情,或者只是发布你过去如何使用这种语言模仿多种网页/ webapps。

3 个答案:

答案 0 :(得分:1)

看一下GNU Gettext,它对多语言支持非常方便。

主要思想是你只需将你的单词或短语包装成一个函数,比如

echo _g('Hello');

因此您没有任何引擎更改。您必须为正在使用的每种语言添加翻译文件。

答案 1 :(得分:1)

由于您正在寻找翻译解决方案,我了解您不使用框架来开发您的网站,因为大多数网站都为您提供处理翻译的解决方案。

我在php中看到的大多数框架和应用都使用数组,其中原始句子是关键,翻译是价值。因此,为了更容易将其翻译成多种语言,关键在于英语。

如果您按照建议使用gettext或其他方法,那么解析您的代码以捕获所有要自动翻译的字符串也会很有用,因为当基本代码增长时您可能会手动执行此操作想要及时了解您的翻译。

答案 2 :(得分:0)

您已经提出了两种存储数据的解决方案,但我建议您需要进一步考虑架构,并更全面地了解每个请求的生命周期。

关于架构:这两种解决方案都不能扩展到很好地描述广泛的词汇 - 尽管一两页就足够了。替代方法是管理可能过度的翻译数据库(例如gettext),并且对于少量页面执行效果较差,但重要的是,大/多个词典的性能不会显着恶化。妥协的解决方案可能是为每个URL /语言(可能从统一数据库中提取)提供数据集。

如果是我,我不会使用您建议用于存储数据的任何方法:解析XML会为每个页面请求创建一个明显的开销:使用\ n作为分隔符会排除在翻译中使用\ n。使用序列化的PHP阵列似乎是最便宜的解决方案。

相关问题