wildalmighty/gettext

PHP - JS gettext 转换器

dev-master 2013-09-10 12:59 UTC

This package is not auto-updated.

Last update: 2024-09-24 03:28:36 UTC


README

由 Oscar Otero 创建 http://oscarotero.com oom@oscarotero.com

GNU Affero GPL 版本 3. https://gnu.ac.cn/licenses/agpl-3.0.html

Gettext 是一个 PHP 库,用于导入/导出/编辑 PO、MO、PHP、JS 文件等格式的 gettext。

功能

  • 用 php 5.3 编写
  • 可扩展性,支持插件

包含以下类

  • Gettext\Translation - 包含翻译定义
  • Gettext\Entries - 翻译集合
  • Gettext\Translator - PHP 的 gettext 实现

提取器

提取器是类,可以从任何源提取 gettext 值,并返回包含它们的 Gettext\Entries 实例。

  • Gettext\Extractors\PhpCode - 扫描 PHP 文件以查找所有 gettext 函数并收集其字符串
  • Gettext\Extractors\JsCode - 扫描 JavaScript 文件以查找所有 gettext 函数并收集其字符串
  • Gettext\Extractors\PhpArray - 从返回值数组的 PHP 文件中获取字符串(PhpArray 生成器的补充)
  • Gettext\Extractors\Po - 从 PO 文件中获取字符串
  • Gettext\Extractors\Mo - 从 MO 文件中获取字符串

生成器

生成器接受 Gettext\Entries 实例,并将数据导出为以下格式之一。

  • Gettext\Generators\Mo - 生成 Mo 文件
  • Gettext\Generators\Po - 生成 Po 文件
  • Gettext\Generators\Jed - 生成与 Jed 库兼容的 json 文件
  • Gettext\Generators\PhpArray - 生成返回包含所有值的 Php 文件

如何使用?

首先,让我们扫描一个 Po 文件

//Include the autoloader if you don't use composer or PSR-0 loader
include('myLibsFolder/Gettext/autoloader.php');

use Gettext\Extractors\Po as PoExtractor;

$translations = PoExtractor::extract('my-file.po');

现在,我们可以编辑一些翻译

$translation = $translations->find(null, 'apples');

if ($translation) {
	$translation->setTranslation('Mazáns');
}

然后导出为 Php 文件和 json 文件,用于与 Jed 库一起使用 (http://slexaxton.github.com/Jed/)

use Gettext\Generators\PhpArray as PhpArrayGenerator;
use Gettext\Generators\Jed as JedGenerator;

PhpArrayGenerator::generateFile($translations, 'locate.php');
JedGenerator::generateFile($translations, 'locate.json');

现在我们可以在代码中使用这些翻译

use Gettext\Translator as Gt;

Gt::loadTranslations('locate.php');

echo Gt::gettext('apples'); //Returns Mazás

您可以使用翻译函数,它是 Gettext\Translator 的简短版本,使用起来更方便

echo __('apples'); //Returns Mazás

__e('apples'); //echo Mazás

并且您可以使用相同的翻译在 JavaScript 中与 Jed 库一起使用 (http://slexaxton.github.com/Jed/)

$.getJSON('locate.json', function (locale) {
	i18n = new Jed({
		locale_data: locale
	});

	alert(i18n.gettext('apples')); //alerts "Mazás"
});

待办事项

  • 自定义复数解析器
  • 使用域进行操作