diversen/simple-php-translation

用于进行翻译、提取翻译和通过Google进行自动翻译的简单解决方案

v3.1.0 2023-10-21 20:16 UTC

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

访问 http://localhost:8000

您也可以在以下位置测试丹麦翻译

http://localhost:8000?lang=da

如果没有翻译,则任何字符串都将获得“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