diversen / simple-php-translation
用于进行翻译、提取翻译和通过Google进行自动翻译的简单解决方案
Requires
- php: >=5.3.0
Requires (Dev)
- google/cloud-translate: ^1.12
README
simple-php-translation
是为您的PHP应用添加翻译的简单解决方案。
安装
composer require diversen/simple-php-translation
如果您想使用Google自动翻译,需要以下内容
composer require google/cloud-translate
翻译放置在以以下命名的文件中
lang/en/language.php
lang/da/language.php
例如,在您的应用 test_app
内部
test_app/lang/en/language.php
language.php
文件可能包含以下内容
$LANG = array (); $LANG['Welcome to my blog'] = 'Welcome to my blog';
丹麦翻译可以在以下位置找到
test_app/lang/da/language.php
此 language.php
可能包含以下内容
$LANG = array (); $LANG['Welcome to my blog'] = 'Velkommen til min blog';
加载语言
use Diversen\Lang; $l = new Lang(); // Most often all translations are placed in a single folder $l->setSingleDir("test_app"); // But you can also set dirs, and look for language files inside multiple language dirs: // $l->setDirsInsideDir("modules/"); // load language. E.g. danish ('da') // $l->loadLanguage('da'); // Or english // e.g. test_app/lang/da/language.php $l->loadLanguage('en'); // now all language files are loaded, and we can translate
翻译
// simple use Diversen\Lang; echo Lang::translate('Here is a text'); // with substitution and a span to indicate that a part of a string should not be translated echo Lang::translate('User with ID <span class="notranslate">{ID}</span> has been locked!', array ('ID' => $id))
提取字符串
这将提取所有 Lang::translate
调用,并将新值添加到翻译文件中。
use Diversen\Translate\Extractor; // same pattern as above for extraction $e = new Extractor(); $e->defaultLanguage ='en'; // which language will we extract to // Most often you will just use a single dir. Like this $e->setSingleDir("test_app"); // Set multiple dirs, like this: // This will create translation folders in e.g. modules/blog, modules/account // $e->setDirsInsideDir('modules/'); $e->updateLang();
$e->updateLang()
调用仅添加源中找到的新字符串,并删除源中删除的字符串。它还知道您是否已更改翻译键的值,那么它将保留该值不变。只有当找到新的键值时,它才更新翻译文件。
使用Google翻译API进行自动翻译
您需要设置Google云翻译
https://cloud.google.com/translate/docs/basic/setup-basic
然后需要Composer包 google/cloud-translate
composer require google/cloud-translate
请记住导出 GOOGLE_APPLICATION_CREDENTIALS,否则您将无法运行脚本。
// same pattern as above for google auto translation. use Diversen\Translate\GoogleTranslate; include_once "vendor/autoload.php"; // Google translator needs this. Substitue with path to your own .json file putenv("GOOGLE_APPLICATION_CREDENTIALS=config-locale/pebble-2c949028ebcc.json"); $t = new GoogleTranslate(); $t->target = 'da'; // danish $t->source = 'en'; $t->setSingleDir("app"); // Or set multiple dirs like this: // This will create translation folders in e.g. modules/blog, modules/account // $e->setDirsInsideDir('modules/'); $t->updateLang();
演示
在 test_app/ 目录中,有一个由一个PHP文件组成的小型PHP应用: test_app/index.php。该文件还包含JavaScript。使用 Extractor
类时,还将提取 Lang.translate
方法。
JavaScript文件 test_app/js/lang.js 将执行翻译。
启动应用
php -S localhost:8000 -t test_app
您也可以在以下位置测试丹麦翻译
如果没有翻译,则任何字符串都将获得“NT: ”(未翻译)前缀。
您可以通过删除 en
语言文件目录来测试此功能。
rm -rf test_app/lang/en
使用脚本 test/extract.php 提取英语翻译 en
。
php test/extract.php
重新加载浏览器。
现在所有翻译都从文件加载,并删除了前缀 'NT: '。
还有一个将翻译成丹麦语(da
)的小脚本。 test/google_translate.php
为了使用此脚本,您需要设置一个 google service account
。然后更改脚本中的这部分
putenv("GOOGLE_APPLICATION_CREDENTIALS=google_json/pebble-2c949028ebcc.json");
到
putenv("GOOGLE_APPLICATION_CREDENTIALS=path/to/service-account-your-key.json");
现在您可以运行
php test/google_translate.php
翻译将如下所示: test_app/lang/da/language.php
最后有一个 test/to_js.php 脚本,该脚本将内容翻译成 JS 模块导出,然后可以被 EMS 模块 test_app/js/lang.js 加载并翻译
许可证
MIT © Dennis Iversen