szakalq/php-i18n

PHP 国际化

dev-master 2015-01-20 10:37 UTC

This package is auto-updated.

Last update: 2024-09-10 09:47:15 UTC


README

原始项目: https://github.com/Philipp15b/php-i18n

变更日志

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');
?>

参数包括

  1. 语言文件路径(ini 文件)
  2. 语言缓存路径
  3. 回退语言
  4. 强制语言
  5. 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...'
?>

到此为止!

它是如何确定用户语言的

此类试图通过生成以下事物的队列来确定用户语言

  1. 强制语言(如果设置)
  2. GET 参数 'lang' ($_GET['lang'])
  3. SESSION 参数 'lang' ($_SESSION['lang'])
  4. HTTP_ACCEPT_LANGUAGE(可以是多种语言)($_SERVER['HTTP_ACCEPT_LANGUAGE'])
  5. 后备语言

首先它会删除重复元素,然后它会替换所有不是 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'。您可以看到,此方法必须返回一个数组。

请注意,此脚本是不安全的。不要在生产环境中使用它!您应该转义所有用户数据!

分叉它!

请分叉此项目并帮助我进行开发。