szakalq / php-i18n
PHP 国际化
Requires
- mustangostang/spyc: 0.5.*@dev
This package is auto-updated.
Last update: 2024-09-10 09:47:15 UTC
README
原始项目: https://github.com/Philipp15b/php-i18n
变更日志
-
添加 composer 支持
-
添加 autoloader spyc 库 (https://github.com/mustangostang/spyc)
-
L:: 更改为 Lang:
PHP i18n
这是一个简单的 PHP 国际化类。没有太多花哨的功能,但速度很快,因为它使用了缓存,并且使用起来很方便。试试看吧!
它的部分特性
- ini 文件中的翻译
- 文件缓存
- 简单的 API (
Lang::category_stringname
) - 自动确定要使用的语言
- 简单 ;)
要求
- 缓存目录的写权限
- PHP 5.2 (仅测试此版本,可能也适用于其他版本)
- PHP SPL 扩展 (默认安装)
安装
"require": { "szakalq/php-i18n": "dev-master" }
设置
要使用 i18n 类,请查看 example.php。您将在文件中找到关于此类的简单教程。否则,按照以下简单的五个步骤操作
1. 创建语言文件
要使用此类,您必须使用 ini 文件进行翻译字符串。它可能看起来像这样
lang_en.ini
(英语)
greeting = "Hello World!" [category] somethingother = "Something other..."
lang_de.ini
(德语)
greeting = "Hallo Welt!" [category] somethingother = "Etwas anderes..."
将这两个文件保存到您将在步骤 4 中设置的目录中。文件必须按照 filePath 设置命名,其中 '{LANGUAGE}' 将被替换为所选语言,例如 'en' 或 'de'。
2. 包含类
<?php require_once 'lib/i18n.class.php'; ?>
3. 初始化类
<?php $i18n = new i18n(); ?>
4. 如有必要,设置一些设置
可能的设置包括
- 语言文件路径(ini 文件)(默认:
./lang/lang_{LANGUAGE}.ini
) - 缓存文件路径(默认:
./langcache/
) - 如果用户语言不可用时的回退语言(默认:
en
) - 如果要强制语言,则强制语言(默认: 无)
- ini 部分分隔符:这用于在语言类中分隔部分。如果您将分隔符设置为
_abc_
,则如果使用 ini 中的类别,您可以通过Lang::category_abc_stringname
访问您的本地化字符串。(默认:_
)
<?php $i18n->setCachePath('./tmp/cache'); $i18n->setFilePath('./langfiles/lang_{LANGUAGE}.ini'); // language file path (the ini files) $i18n->setFallbackLang('en'); $i18n->setForcedLang('en'); // force english, even if another user language is available $i18n->setSectionSeperator('_'); ?>
缩写
还有一个缩写:您可以在构造函数中设置所有设置!
<?php $i18n = new i18n('lang/lang_{LANGUAGE}.ini', 'langcache/', 'en'); ?>
参数包括
- 语言文件路径(ini 文件)
- 语言缓存路径
- 回退语言
- 强制语言
- ini 部分分隔符
... 按此顺序(所有参数都是可选的)。
5. 调用 init()
方法来加载所有文件和翻译
调用 init()
文件以指示类加载所需的语言文件,加载缓存文件(如果不可用则生成它),并使 L
类可用,以便您可以通过它访问本地化。
<?php $i18n->init(); ?>
6. 使用本地化
要调用您的本地化,请简单地使用 Lang
类和字符串的类常量。
在这个例子中,我们使用步骤 1 中看到的翻译字符串。
<?php echo Lang::greeting; // If 'en' is applied: 'Hello World' echo Lang::category_somethingother; // If 'en' is applied: 'Something other...' ?>
到此为止!
它是如何确定用户语言的
此类试图通过生成以下事物的队列来确定用户语言
- 强制语言(如果设置)
- GET 参数 'lang' (
$_GET['lang']
) - SESSION 参数 'lang' (
$_SESSION['lang']
) - HTTP_ACCEPT_LANGUAGE(可以是多种语言)(
$_SERVER['HTTP_ACCEPT_LANGUAGE']
) - 后备语言
首先它会删除重复元素,然后它会替换所有不是 A-Z、a-z 或 0-9 的字符。之后它会搜索语言文件。例如,如果您将 GET 参数 'lang' 设置为 'en' 而没有设置强制语言,该类会尝试找到文件 lang/lang_en.ini
(如果设置 langFilePath
为默认值(lang/lang_{LANGUAGE}.ini
))。如果该文件不存在,它会尝试找到会话中定义的语言的语言文件,依此类推。
如何修改此实现
您可以通过扩展 i18n 类来更改此 "算法"。您可以这样做
<?php require_once 'lib/i18n.class.php'; class My_i18n extends i18n { public function getUserLangs() { $userLangs = new array(); $userLangs[] = $_GET['language']; $userLangs[] = $_SESSION['userlanguage']; return $userLangs; } } $i18n = new My_i18n(); // [...] ?>
此对 i18n 类的基本扩展替换了默认的 getUserLangs()
-方法的实现,并且仅使用 GET 参数 'language' 和会话参数 'userlanguage'。您可以看到,此方法必须返回一个数组。
请注意,此脚本是不安全的。不要在生产环境中使用它!您应该转义所有用户数据!
分叉它!
请分叉此项目并帮助我进行开发。