首页 > 后端开发 > php教程 > 带有getText的简单多语言树枝应用程序

带有getText的简单多语言树枝应用程序

Christopher Nolan
发布: 2025-02-15 08:42:10
原创
576 人浏览过

本教程演示了如何使用Twig和GetText向PHP应用程序添加多语言支持。 它比Symfony的翻译组件(例如Symfony的翻译组件)要快得多。我们将修改既有英语应用程序(NOFW)来说明这一点。

Easy Multi-Language Twig Apps with Gettext

键优点:

  • 效率: getText的本机实现与userland替代方案相比提供了出色的性能。
  • 简单性:
  • 将国际化添加到现有应用程序的过程非常简单。>
  • 综合指南:
  • >本教程涵盖环境设置,字符串提取(使用),xgettext.po文件生成,通过.mo扩展的twig集成以及有用的实用程序脚本。i18n

设置和基础知识:

我们将使用宅基地改进(假设已经安装了GetText;稍后提供手动安装的说明)。 因为NOFW使用树枝,因此需要扩展:

> i18n

>
git clone https://github.com/swader/nofw
cd nofw
git checkout tags/2.93 -b 2.93
composer require twig/extensions
登录后复制
登录后复制
(注意:这克隆较旧的NOFW版本,而无需内置国际化以进行教程。

>按照NOFW读取文件进行配置数据库。 该应用程序现在应该运行。

getText使用

或其别名Easy Multi-Language Twig Apps with Gettext 标记可翻译字符串。 如果找不到翻译,则返回原始字符串(占位符)。

>让我们用一个简单的PHP文件(twig之外)对此进行测试以验证getText功能。创建

gettext("string") _("string")

创建目录结构:

i18n.php

<?php
$language = "en_US.UTF-8";
putenv("LANGUAGE=" . $language);
setlocale(LC_ALL, $language);

$domain = "messages";
bindtextdomain($domain, "Locale");
bind_textdomain_codeset($domain, 'UTF-8');

textdomain($domain);

echo _("HELLO_WORLD");
登录后复制
登录后复制

代码为GetText设置语言,语言环境和域。 由于缺少语言文件,因此运行此功能会回荡“ Hello_world”。

>

Easy Multi-Language Twig Apps with Gettext 字符串提取:

>使用

从您的文件中提取字符串:

这将创建

(便携式对象模板)。 生成一个英语

文件:xgettext

xgettext --from-code=UTF-8 -o Locale/messages.pot public/i18n.php
登录后复制
登录后复制
编辑

,翻译“ hello_world”(例如,“ howdy”)。 编译为messages.pot.po

msginit --locale=en_US --output-file=Locale/en_US/LC_MESSAGES/messages.po --input=Locale/messages.pot
登录后复制
登录后复制

>添加一种新语言(例如,克罗地亚语):messages.po.mo>

  1. 安装语言环境:sudo locale-gen hr_HR hr_HR.UTF-8; sudo update-locale; sudo dpkg-reconfigure locales
  2. >
  3. 生成.po> file:mkdir -p Locale/hr_HR/LC_MESSAGES; msginit --locale=hr_HR --output-file=Locale/hr_HR/LC_MESSAGES/messages.po --input=Locale/messages.pot
  4. >
  5. >在messages.po>中将“ hello_world”转换为“ zdravo”。
  6. 编译到
  7. .mo<>msgfmt -c -o Locale/hr_HR/LC_MESSAGES/messages.mo Locale/hr_HR/LC_MESSAGES/messages.po
  8. 更改
  9. 的语言环境为i18n.php和测试。 可能需要重新启动服务器。hr_HR.UTF-8

twig Integration:

>将其添加到

app/config/config_web.php

在您的树枝模板中,使用
git clone https://github.com/swader/nofw
cd nofw
git checkout tags/2.93 -b 2.93
composer require twig/extensions
登录后复制
登录后复制
<>> block:>

trans

>不直接处理树枝,因此我们将使用缓存机制。创建
<?php
$language = "en_US.UTF-8";
putenv("LANGUAGE=" . $language);
setlocale(LC_ALL, $language);

$domain = "messages";
bindtextdomain($domain, "Locale");
bind_textdomain_codeset($domain, 'UTF-8');

textdomain($domain);

echo _("HELLO_WORLD");
登录后复制
登录后复制

xgettext app/bin/twigcache.php然后从缓存的文件中提取字符串:

xgettext --from-code=UTF-8 -o Locale/messages.pot public/i18n.php
登录后复制
登录后复制

更新>使用

和recompile
msginit --locale=en_US --output-file=Locale/en_US/LC_MESSAGES/messages.po --input=Locale/messages.pot
登录后复制
登录后复制
文件的文件。

.pomsgmerge .mo

奖励:实用程序脚本(App/bin/i18n): Easy Multi-Language Twig Apps with Gettext

>教程提供bash脚本(

)来自动添加语言的过程,更新

>和addlang.sh>> files。 这些脚本在原始文本中详细介绍。update-pot.sh> update-mo.sh config.sh部署:.pot.mo

>确保安装getText并在服务器上生成位置。 在ubuntu上:

文件应成为您版本控件的一部分。 适用于非ubuntu系统的安装命令和脚本。 FAQ部分提供了更多详细信息和故障排除信息。
msgfmt -c -o Locale/en_US/LC_MESSAGES/messages.mo Locale/en_US/LC_MESSAGES/messages.po
登录后复制

以上是带有getText的简单多语言树枝应用程序的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板