Improve translations
- Add support for translations in JavaScript code using babel lib and a custom PO file converter to JSON (using sepia/po-parser lib for PO files parsing) - Put translation CLI commands in a dedicated file - update_messages CLI command now provide PO file initialization feature using msginit and support of compendium files
This commit is contained in:
parent
129eff1986
commit
444c1ec2fc
23 changed files with 1478 additions and 596 deletions
|
@ -4,6 +4,7 @@
|
||||||
"pear/console_table": "^1.3",
|
"pear/console_table": "^1.3",
|
||||||
"brenard/php-unidecode": "dev-master",
|
"brenard/php-unidecode": "dev-master",
|
||||||
"smarty-gettext/smarty-gettext": "^1.6",
|
"smarty-gettext/smarty-gettext": "^1.6",
|
||||||
"smarty-gettext/tsmarty2c": "^0.2.1"
|
"smarty-gettext/tsmarty2c": "^0.2.1",
|
||||||
|
"sepia/po-parser": "^6.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
310
composer.lock
generated
310
composer.lock
generated
|
@ -4,7 +4,7 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "a04f1f6d9c33a934cf0fe14d26de9ae7",
|
"content-hash": "59b3a756d6d1647fc36968d2cd8edf9b",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "brenard/php-unidecode",
|
"name": "brenard/php-unidecode",
|
||||||
|
@ -79,6 +79,10 @@
|
||||||
"pdo",
|
"pdo",
|
||||||
"query"
|
"query"
|
||||||
],
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/envms/fluentpdo/issues",
|
||||||
|
"source": "https://github.com/envms/fluentpdo/tree/legacy"
|
||||||
|
},
|
||||||
"time": "2018-04-27T19:01:30+00:00"
|
"time": "2018-04-27T19:01:30+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -182,24 +186,28 @@
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"console"
|
"console"
|
||||||
],
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Console_Table",
|
||||||
|
"source": "https://github.com/pear/Console_Table"
|
||||||
|
},
|
||||||
"time": "2018-01-25T20:47:17+00:00"
|
"time": "2018-01-25T20:47:17+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "psr/container",
|
"name": "psr/container",
|
||||||
"version": "1.1.1",
|
"version": "1.1.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/php-fig/container.git",
|
"url": "https://github.com/php-fig/container.git",
|
||||||
"reference": "8622567409010282b7aeebe4bb841fe98b58dcaf"
|
"reference": "513e0666f7216c7459170d56df27dfcefe1689ea"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf",
|
"url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea",
|
||||||
"reference": "8622567409010282b7aeebe4bb841fe98b58dcaf",
|
"reference": "513e0666f7216c7459170d56df27dfcefe1689ea",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.2.0"
|
"php": ">=7.4.0"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
|
@ -228,9 +236,63 @@
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/php-fig/container/issues",
|
"issues": "https://github.com/php-fig/container/issues",
|
||||||
"source": "https://github.com/php-fig/container/tree/1.1.1"
|
"source": "https://github.com/php-fig/container/tree/1.1.2"
|
||||||
},
|
},
|
||||||
"time": "2021-03-05T17:36:06+00:00"
|
"time": "2021-11-05T16:50:12+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "sepia/po-parser",
|
||||||
|
"version": "6.0.1",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/raulferras/PHP-po-parser.git",
|
||||||
|
"reference": "f60a4a6259b08cc04807c4ad5f59ec5a006bb87b"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/raulferras/PHP-po-parser/zipball/f60a4a6259b08cc04807c4ad5f59ec5a006bb87b",
|
||||||
|
"reference": "f60a4a6259b08cc04807c4ad5f59ec5a006bb87b",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.3",
|
||||||
|
"symfony/polyfill-mbstring": "^1"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"fzaninotto/faker": "^1.7",
|
||||||
|
"phpunit/phpunit": "^4.8.36",
|
||||||
|
"squizlabs/php_codesniffer": "^2.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Sepia\\PoParser\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Raúl Ferràs",
|
||||||
|
"email": "raul.ferras@gmail.com",
|
||||||
|
"role": "developer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Gettext *.PO file parser for PHP.",
|
||||||
|
"homepage": "https://github.com/raulferras/PHP-po-parser",
|
||||||
|
"keywords": [
|
||||||
|
"gettext",
|
||||||
|
"i10n",
|
||||||
|
"i18n",
|
||||||
|
"po"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/raulferras/PHP-po-parser/issues",
|
||||||
|
"source": "https://github.com/raulferras/PHP-po-parser/tree/6.0.1"
|
||||||
|
},
|
||||||
|
"time": "2020-05-29T05:20:47+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "smarty-gettext/smarty-gettext",
|
"name": "smarty-gettext/smarty-gettext",
|
||||||
|
@ -293,16 +355,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "smarty-gettext/tsmarty2c",
|
"name": "smarty-gettext/tsmarty2c",
|
||||||
"version": "0.2.1",
|
"version": "0.2.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/smarty-gettext/tsmarty2c.git",
|
"url": "https://github.com/smarty-gettext/tsmarty2c.git",
|
||||||
"reference": "84b342e6fb7b4b5b3e92e732635f3b0bbc217649"
|
"reference": "fb899c70757f868cc3ee47824b04332b1ed02ea8"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/smarty-gettext/tsmarty2c/zipball/84b342e6fb7b4b5b3e92e732635f3b0bbc217649",
|
"url": "https://api.github.com/repos/smarty-gettext/tsmarty2c/zipball/fb899c70757f868cc3ee47824b04332b1ed02ea8",
|
||||||
"reference": "84b342e6fb7b4b5b3e92e732635f3b0bbc217649",
|
"reference": "fb899c70757f868cc3ee47824b04332b1ed02ea8",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -340,9 +402,9 @@
|
||||||
"homepage": "https://github.com/smarty-gettext/tsmarty2c",
|
"homepage": "https://github.com/smarty-gettext/tsmarty2c",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/smarty-gettext/tsmarty2c/issues",
|
"issues": "https://github.com/smarty-gettext/tsmarty2c/issues",
|
||||||
"source": "https://github.com/smarty-gettext/tsmarty2c/tree/0.2.1"
|
"source": "https://github.com/smarty-gettext/tsmarty2c/tree/0.2.2"
|
||||||
},
|
},
|
||||||
"time": "2020-11-11T21:40:04+00:00"
|
"time": "2021-12-24T11:57:46+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "smarty/smarty",
|
"name": "smarty/smarty",
|
||||||
|
@ -408,26 +470,26 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/console",
|
"name": "symfony/console",
|
||||||
"version": "v5.3.4",
|
"version": "v5.4.7",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/console.git",
|
"url": "https://github.com/symfony/console.git",
|
||||||
"reference": "ebd610dacd40d75b6a12bf64b5ccd494fc7d6ab1"
|
"reference": "900275254f0a1a2afff1ab0e11abd5587a10e1d6"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/console/zipball/ebd610dacd40d75b6a12bf64b5ccd494fc7d6ab1",
|
"url": "https://api.github.com/repos/symfony/console/zipball/900275254f0a1a2afff1ab0e11abd5587a10e1d6",
|
||||||
"reference": "ebd610dacd40d75b6a12bf64b5ccd494fc7d6ab1",
|
"reference": "900275254f0a1a2afff1ab0e11abd5587a10e1d6",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.2.5",
|
"php": ">=7.2.5",
|
||||||
"symfony/deprecation-contracts": "^2.1",
|
"symfony/deprecation-contracts": "^2.1|^3",
|
||||||
"symfony/polyfill-mbstring": "~1.0",
|
"symfony/polyfill-mbstring": "~1.0",
|
||||||
"symfony/polyfill-php73": "^1.8",
|
"symfony/polyfill-php73": "^1.9",
|
||||||
"symfony/polyfill-php80": "^1.16",
|
"symfony/polyfill-php80": "^1.16",
|
||||||
"symfony/service-contracts": "^1.1|^2",
|
"symfony/service-contracts": "^1.1|^2|^3",
|
||||||
"symfony/string": "^5.1"
|
"symfony/string": "^5.1|^6.0"
|
||||||
},
|
},
|
||||||
"conflict": {
|
"conflict": {
|
||||||
"psr/log": ">=3",
|
"psr/log": ">=3",
|
||||||
|
@ -442,12 +504,12 @@
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"psr/log": "^1|^2",
|
"psr/log": "^1|^2",
|
||||||
"symfony/config": "^4.4|^5.0",
|
"symfony/config": "^4.4|^5.0|^6.0",
|
||||||
"symfony/dependency-injection": "^4.4|^5.0",
|
"symfony/dependency-injection": "^4.4|^5.0|^6.0",
|
||||||
"symfony/event-dispatcher": "^4.4|^5.0",
|
"symfony/event-dispatcher": "^4.4|^5.0|^6.0",
|
||||||
"symfony/lock": "^4.4|^5.0",
|
"symfony/lock": "^4.4|^5.0|^6.0",
|
||||||
"symfony/process": "^4.4|^5.0",
|
"symfony/process": "^4.4|^5.0|^6.0",
|
||||||
"symfony/var-dumper": "^4.4|^5.0"
|
"symfony/var-dumper": "^4.4|^5.0|^6.0"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"psr/log": "For using the console logger",
|
"psr/log": "For using the console logger",
|
||||||
|
@ -487,7 +549,7 @@
|
||||||
"terminal"
|
"terminal"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/console/tree/v5.3.4"
|
"source": "https://github.com/symfony/console/tree/v5.4.7"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
|
@ -503,20 +565,20 @@
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2021-07-26T16:33:26+00:00"
|
"time": "2022-03-31T17:09:19+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/deprecation-contracts",
|
"name": "symfony/deprecation-contracts",
|
||||||
"version": "v2.4.0",
|
"version": "v2.5.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/deprecation-contracts.git",
|
"url": "https://github.com/symfony/deprecation-contracts.git",
|
||||||
"reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627"
|
"reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627",
|
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
|
||||||
"reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627",
|
"reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -525,7 +587,7 @@
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-main": "2.4-dev"
|
"dev-main": "2.5-dev"
|
||||||
},
|
},
|
||||||
"thanks": {
|
"thanks": {
|
||||||
"name": "symfony/contracts",
|
"name": "symfony/contracts",
|
||||||
|
@ -554,7 +616,7 @@
|
||||||
"description": "A generic function and convention to trigger deprecation notices",
|
"description": "A generic function and convention to trigger deprecation notices",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0"
|
"source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.1"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
|
@ -570,24 +632,25 @@
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2021-03-23T23:28:01+00:00"
|
"time": "2022-01-02T09:53:40+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/finder",
|
"name": "symfony/finder",
|
||||||
"version": "v5.3.4",
|
"version": "v5.4.3",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/finder.git",
|
"url": "https://github.com/symfony/finder.git",
|
||||||
"reference": "17f50e06018baec41551a71a15731287dbaab186"
|
"reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/finder/zipball/17f50e06018baec41551a71a15731287dbaab186",
|
"url": "https://api.github.com/repos/symfony/finder/zipball/231313534dded84c7ecaa79d14bc5da4ccb69b7d",
|
||||||
"reference": "17f50e06018baec41551a71a15731287dbaab186",
|
"reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.2.5",
|
"php": ">=7.2.5",
|
||||||
|
"symfony/deprecation-contracts": "^2.1|^3",
|
||||||
"symfony/polyfill-php80": "^1.16"
|
"symfony/polyfill-php80": "^1.16"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
|
@ -616,7 +679,7 @@
|
||||||
"description": "Finds files and directories via an intuitive fluent interface",
|
"description": "Finds files and directories via an intuitive fluent interface",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/finder/tree/v5.3.4"
|
"source": "https://github.com/symfony/finder/tree/v5.4.3"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
|
@ -632,25 +695,28 @@
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2021-07-23T15:54:19+00:00"
|
"time": "2022-01-26T16:34:36+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-ctype",
|
"name": "symfony/polyfill-ctype",
|
||||||
"version": "v1.23.0",
|
"version": "v1.25.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/polyfill-ctype.git",
|
"url": "https://github.com/symfony/polyfill-ctype.git",
|
||||||
"reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce"
|
"reference": "30885182c981ab175d4d034db0f6f469898070ab"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce",
|
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab",
|
||||||
"reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce",
|
"reference": "30885182c981ab175d4d034db0f6f469898070ab",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.1"
|
"php": ">=7.1"
|
||||||
},
|
},
|
||||||
|
"provide": {
|
||||||
|
"ext-ctype": "*"
|
||||||
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"ext-ctype": "For best performance"
|
"ext-ctype": "For best performance"
|
||||||
},
|
},
|
||||||
|
@ -665,12 +731,12 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
|
||||||
"Symfony\\Polyfill\\Ctype\\": ""
|
|
||||||
},
|
|
||||||
"files": [
|
"files": [
|
||||||
"bootstrap.php"
|
"bootstrap.php"
|
||||||
]
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Polyfill\\Ctype\\": ""
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
"license": [
|
"license": [
|
||||||
|
@ -695,7 +761,7 @@
|
||||||
"portable"
|
"portable"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0"
|
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
|
@ -711,20 +777,20 @@
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2021-02-19T12:13:01+00:00"
|
"time": "2021-10-20T20:35:02+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-intl-grapheme",
|
"name": "symfony/polyfill-intl-grapheme",
|
||||||
"version": "v1.23.0",
|
"version": "v1.25.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
|
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
|
||||||
"reference": "24b72c6baa32c746a4d0840147c9715e42bb68ab"
|
"reference": "81b86b50cf841a64252b439e738e97f4a34e2783"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/24b72c6baa32c746a4d0840147c9715e42bb68ab",
|
"url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783",
|
||||||
"reference": "24b72c6baa32c746a4d0840147c9715e42bb68ab",
|
"reference": "81b86b50cf841a64252b439e738e97f4a34e2783",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -744,12 +810,12 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
|
||||||
"Symfony\\Polyfill\\Intl\\Grapheme\\": ""
|
|
||||||
},
|
|
||||||
"files": [
|
"files": [
|
||||||
"bootstrap.php"
|
"bootstrap.php"
|
||||||
]
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Polyfill\\Intl\\Grapheme\\": ""
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
"license": [
|
"license": [
|
||||||
|
@ -776,7 +842,7 @@
|
||||||
"shim"
|
"shim"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.0"
|
"source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.25.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
|
@ -792,11 +858,11 @@
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2021-05-27T09:17:38+00:00"
|
"time": "2021-11-23T21:10:46+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-intl-normalizer",
|
"name": "symfony/polyfill-intl-normalizer",
|
||||||
"version": "v1.23.0",
|
"version": "v1.25.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
|
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
|
||||||
|
@ -825,12 +891,12 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
|
||||||
"Symfony\\Polyfill\\Intl\\Normalizer\\": ""
|
|
||||||
},
|
|
||||||
"files": [
|
"files": [
|
||||||
"bootstrap.php"
|
"bootstrap.php"
|
||||||
],
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Polyfill\\Intl\\Normalizer\\": ""
|
||||||
|
},
|
||||||
"classmap": [
|
"classmap": [
|
||||||
"Resources/stubs"
|
"Resources/stubs"
|
||||||
]
|
]
|
||||||
|
@ -860,7 +926,7 @@
|
||||||
"shim"
|
"shim"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0"
|
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.25.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
|
@ -880,21 +946,24 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-mbstring",
|
"name": "symfony/polyfill-mbstring",
|
||||||
"version": "v1.23.0",
|
"version": "v1.25.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
||||||
"reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1"
|
"reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2df51500adbaebdc4c38dea4c89a2e131c45c8a1",
|
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825",
|
||||||
"reference": "2df51500adbaebdc4c38dea4c89a2e131c45c8a1",
|
"reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.1"
|
"php": ">=7.1"
|
||||||
},
|
},
|
||||||
|
"provide": {
|
||||||
|
"ext-mbstring": "*"
|
||||||
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"ext-mbstring": "For best performance"
|
"ext-mbstring": "For best performance"
|
||||||
},
|
},
|
||||||
|
@ -909,12 +978,12 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
|
||||||
"Symfony\\Polyfill\\Mbstring\\": ""
|
|
||||||
},
|
|
||||||
"files": [
|
"files": [
|
||||||
"bootstrap.php"
|
"bootstrap.php"
|
||||||
]
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Polyfill\\Mbstring\\": ""
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
"license": [
|
"license": [
|
||||||
|
@ -940,7 +1009,7 @@
|
||||||
"shim"
|
"shim"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.23.0"
|
"source": "https://github.com/symfony/polyfill-mbstring/tree/v1.25.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
|
@ -956,20 +1025,20 @@
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2021-05-27T09:27:20+00:00"
|
"time": "2021-11-30T18:21:41+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-php73",
|
"name": "symfony/polyfill-php73",
|
||||||
"version": "v1.23.0",
|
"version": "v1.25.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/polyfill-php73.git",
|
"url": "https://github.com/symfony/polyfill-php73.git",
|
||||||
"reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010"
|
"reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010",
|
"url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5",
|
||||||
"reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010",
|
"reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -986,12 +1055,12 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
|
||||||
"Symfony\\Polyfill\\Php73\\": ""
|
|
||||||
},
|
|
||||||
"files": [
|
"files": [
|
||||||
"bootstrap.php"
|
"bootstrap.php"
|
||||||
],
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Polyfill\\Php73\\": ""
|
||||||
|
},
|
||||||
"classmap": [
|
"classmap": [
|
||||||
"Resources/stubs"
|
"Resources/stubs"
|
||||||
]
|
]
|
||||||
|
@ -1019,7 +1088,7 @@
|
||||||
"shim"
|
"shim"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0"
|
"source": "https://github.com/symfony/polyfill-php73/tree/v1.25.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
|
@ -1035,20 +1104,20 @@
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2021-02-19T12:13:01+00:00"
|
"time": "2021-06-05T21:20:04+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-php80",
|
"name": "symfony/polyfill-php80",
|
||||||
"version": "v1.23.0",
|
"version": "v1.25.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/polyfill-php80.git",
|
"url": "https://github.com/symfony/polyfill-php80.git",
|
||||||
"reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0"
|
"reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/eca0bf41ed421bed1b57c4958bab16aa86b757d0",
|
"url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c",
|
||||||
"reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0",
|
"reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -1065,12 +1134,12 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
|
||||||
"Symfony\\Polyfill\\Php80\\": ""
|
|
||||||
},
|
|
||||||
"files": [
|
"files": [
|
||||||
"bootstrap.php"
|
"bootstrap.php"
|
||||||
],
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Polyfill\\Php80\\": ""
|
||||||
|
},
|
||||||
"classmap": [
|
"classmap": [
|
||||||
"Resources/stubs"
|
"Resources/stubs"
|
||||||
]
|
]
|
||||||
|
@ -1102,7 +1171,7 @@
|
||||||
"shim"
|
"shim"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/polyfill-php80/tree/v1.23.0"
|
"source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
|
@ -1118,25 +1187,29 @@
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2021-02-19T12:13:01+00:00"
|
"time": "2022-03-04T08:16:47+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/service-contracts",
|
"name": "symfony/service-contracts",
|
||||||
"version": "v2.4.0",
|
"version": "v2.5.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/service-contracts.git",
|
"url": "https://github.com/symfony/service-contracts.git",
|
||||||
"reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb"
|
"reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb",
|
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/24d9dc654b83e91aa59f9d167b131bc3b5bea24c",
|
||||||
"reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb",
|
"reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.2.5",
|
"php": ">=7.2.5",
|
||||||
"psr/container": "^1.1"
|
"psr/container": "^1.1",
|
||||||
|
"symfony/deprecation-contracts": "^2.1|^3"
|
||||||
|
},
|
||||||
|
"conflict": {
|
||||||
|
"ext-psr": "<1.1|>=2"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"symfony/service-implementation": ""
|
"symfony/service-implementation": ""
|
||||||
|
@ -1144,7 +1217,7 @@
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-main": "2.4-dev"
|
"dev-main": "2.5-dev"
|
||||||
},
|
},
|
||||||
"thanks": {
|
"thanks": {
|
||||||
"name": "symfony/contracts",
|
"name": "symfony/contracts",
|
||||||
|
@ -1181,7 +1254,7 @@
|
||||||
"standards"
|
"standards"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/service-contracts/tree/v2.4.0"
|
"source": "https://github.com/symfony/service-contracts/tree/v2.5.1"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
|
@ -1197,20 +1270,20 @@
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2021-04-01T10:43:52+00:00"
|
"time": "2022-03-13T20:07:29+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/string",
|
"name": "symfony/string",
|
||||||
"version": "v5.3.3",
|
"version": "v5.4.3",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/string.git",
|
"url": "https://github.com/symfony/string.git",
|
||||||
"reference": "bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1"
|
"reference": "92043b7d8383e48104e411bc9434b260dbeb5a10"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/string/zipball/bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1",
|
"url": "https://api.github.com/repos/symfony/string/zipball/92043b7d8383e48104e411bc9434b260dbeb5a10",
|
||||||
"reference": "bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1",
|
"reference": "92043b7d8383e48104e411bc9434b260dbeb5a10",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -1221,20 +1294,23 @@
|
||||||
"symfony/polyfill-mbstring": "~1.0",
|
"symfony/polyfill-mbstring": "~1.0",
|
||||||
"symfony/polyfill-php80": "~1.15"
|
"symfony/polyfill-php80": "~1.15"
|
||||||
},
|
},
|
||||||
|
"conflict": {
|
||||||
|
"symfony/translation-contracts": ">=3.0"
|
||||||
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"symfony/error-handler": "^4.4|^5.0",
|
"symfony/error-handler": "^4.4|^5.0|^6.0",
|
||||||
"symfony/http-client": "^4.4|^5.0",
|
"symfony/http-client": "^4.4|^5.0|^6.0",
|
||||||
"symfony/translation-contracts": "^1.1|^2",
|
"symfony/translation-contracts": "^1.1|^2",
|
||||||
"symfony/var-exporter": "^4.4|^5.0"
|
"symfony/var-exporter": "^4.4|^5.0|^6.0"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
|
||||||
"Symfony\\Component\\String\\": ""
|
|
||||||
},
|
|
||||||
"files": [
|
"files": [
|
||||||
"Resources/functions.php"
|
"Resources/functions.php"
|
||||||
],
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"Symfony\\Component\\String\\": ""
|
||||||
|
},
|
||||||
"exclude-from-classmap": [
|
"exclude-from-classmap": [
|
||||||
"/Tests/"
|
"/Tests/"
|
||||||
]
|
]
|
||||||
|
@ -1264,7 +1340,7 @@
|
||||||
"utf8"
|
"utf8"
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"source": "https://github.com/symfony/string/tree/v5.3.3"
|
"source": "https://github.com/symfony/string/tree/v5.4.3"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
|
@ -1280,7 +1356,7 @@
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2021-06-27T11:44:38+00:00"
|
"time": "2022-01-02T09:53:40+00:00"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"packages-dev": [],
|
"packages-dev": [],
|
||||||
|
@ -1293,5 +1369,5 @@
|
||||||
"prefer-lowest": false,
|
"prefer-lowest": false,
|
||||||
"platform": [],
|
"platform": [],
|
||||||
"platform-dev": [],
|
"platform-dev": [],
|
||||||
"plugin-api-version": "2.0.0"
|
"plugin-api-version": "2.3.0"
|
||||||
}
|
}
|
||||||
|
|
188
includes/cli.php
188
includes/cli.php
|
@ -378,191 +378,3 @@ add_cli_command(
|
||||||
___("-m/--max-age Item expiration limit (in days, optional)"),
|
___("-m/--max-age Item expiration limit (in days, optional)"),
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
function cli_extract_messages($command_args) {
|
|
||||||
global $root_dir_path, $root_lang_dir, $smarty_templates_dir;
|
|
||||||
|
|
||||||
// List PHP files to parse
|
|
||||||
$php_files = run_external_command(
|
|
||||||
array('find', escapeshellarg($root_dir_path), '-name', "'*.php'"),
|
|
||||||
null, // no STDIN data
|
|
||||||
false // do not escape command args (already done)
|
|
||||||
);
|
|
||||||
if (!is_array($php_files) || $php_files[0] != 0) {
|
|
||||||
logging('FATAL', _("Fail to list PHP files."));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Extract messages from PHP files using xgettext
|
|
||||||
$result = run_external_command(
|
|
||||||
array(
|
|
||||||
"xgettext",
|
|
||||||
"--from-code utf-8",
|
|
||||||
"--language=PHP",
|
|
||||||
"-o", "$root_lang_dir/php-messages.pot", // Output
|
|
||||||
"--omit-header", // No POT header
|
|
||||||
"--keyword=___", // Handle custom ___() translation function
|
|
||||||
"--files=-" // Read files to parse from STDIN
|
|
||||||
),
|
|
||||||
$php_files[1] // Pass PHP files list via STDIN
|
|
||||||
);
|
|
||||||
if (!is_array($result) || $result[0] != 0)
|
|
||||||
logging('FATAL', _("Fail to extract messages from PHP files using xgettext."));
|
|
||||||
|
|
||||||
// Extract messages from templates files using tsmarty2c.php
|
|
||||||
$result = run_external_command(
|
|
||||||
array (
|
|
||||||
"$root_dir_path/vendor/bin/tsmarty2c.php",
|
|
||||||
"-o", "$root_lang_dir/templates-messages.pot",
|
|
||||||
$smarty_templates_dir,
|
|
||||||
)
|
|
||||||
);
|
|
||||||
if (!is_array($result) || $result[0] != 0)
|
|
||||||
logging('FATAL', _("Fail to extract messages from template files using tsmarty2c.php script."));
|
|
||||||
|
|
||||||
// Merge previous results in ldapsaisie.pot file using msgcat
|
|
||||||
$result = run_external_command(array(
|
|
||||||
'msgcat',
|
|
||||||
"$root_lang_dir/php-messages.pot",
|
|
||||||
"$root_lang_dir/templates-messages.pot",
|
|
||||||
"-o", "$root_lang_dir/messages.pot",
|
|
||||||
));
|
|
||||||
if (!is_array($result) || $result[0] != 0)
|
|
||||||
logging('FATAL', _("Fail to merge messages using msgcat."));
|
|
||||||
}
|
|
||||||
add_cli_command(
|
|
||||||
'extract_messages',
|
|
||||||
'cli_extract_messages',
|
|
||||||
___("Extract messages that need to be translated"),
|
|
||||||
null,
|
|
||||||
___("This command could be used to generate/update lang/messages.pot file.")
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
function cli_update_messages($command_args) {
|
|
||||||
global $root_dir_path, $root_lang_dir, $smarty_templates_dir;
|
|
||||||
|
|
||||||
$pot_file = "$root_lang_dir/messages.pot";
|
|
||||||
if (!is_file($pot_file))
|
|
||||||
logging(
|
|
||||||
'FATAL', sprintf(
|
|
||||||
_("POT file not found (%s). Please run extract_messages first."),
|
|
||||||
$pot_file
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
if ($dh = opendir($root_lang_dir)) {
|
|
||||||
$error = False;
|
|
||||||
while (($file = readdir($dh)) !== false) {
|
|
||||||
if (!is_dir($root_lang_dir . '/' . $file) || in_array($file, array('.', '..')) || is_link($root_lang_dir . '/' . $file))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
logging('DEBUG', sprintf(_("Lang directory '%s' found"), $file));
|
|
||||||
|
|
||||||
// Check LC_MESSAGES directory exists
|
|
||||||
$lang = $file;
|
|
||||||
$lang_dir = $root_lang_dir . '/' . $file . '/LC_MESSAGES' ;
|
|
||||||
if (!is_dir($lang_dir)) {
|
|
||||||
logging('DEBUG', sprintf(
|
|
||||||
_("LC_MESSAGES directory not found in lang '%s' directory, ignore it."),
|
|
||||||
$lang)
|
|
||||||
);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Test .PO file is present
|
|
||||||
$po_file = $lang_dir . '/' . TEXT_DOMAIN . '.po';
|
|
||||||
if (!is_file($po_file)) {
|
|
||||||
logging('DEBUG', sprintf(
|
|
||||||
_("PO file not found in lang '%s' directory, ignore it."),
|
|
||||||
$lang)
|
|
||||||
);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update messages in PO file from POT file using msgmerge
|
|
||||||
$result = run_external_command(
|
|
||||||
array("msgmerge", "-q", "-U", $po_file, $pot_file)
|
|
||||||
);
|
|
||||||
if (!is_array($result) || $result[0] != 0) {
|
|
||||||
logging('ERROR', sprintf(
|
|
||||||
_("Fail to update messages in %s PO file using msgmerge (%s)."),
|
|
||||||
$lang, $po_file)
|
|
||||||
);
|
|
||||||
$error = True;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
closedir($dh);
|
|
||||||
return !$error;
|
|
||||||
}
|
|
||||||
|
|
||||||
logging('FATAL', sprintf(_("Fail to open root lang directory (%s)."), $root_dir_path));
|
|
||||||
}
|
|
||||||
add_cli_command(
|
|
||||||
'update_messages',
|
|
||||||
'cli_update_messages',
|
|
||||||
___("Update messages in existing translation PO lang files"),
|
|
||||||
null,
|
|
||||||
___("This command could be used to update PO files in lang/*/LC_MESSAGES directories.")
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
function cli_compile_messages($command_args) {
|
|
||||||
global $root_dir_path, $root_lang_dir, $smarty_templates_dir;
|
|
||||||
|
|
||||||
if ($dh = opendir($root_lang_dir)) {
|
|
||||||
$error = False;
|
|
||||||
while (($file = readdir($dh)) !== false) {
|
|
||||||
if (!is_dir($root_lang_dir . '/' . $file) || in_array($file, array('.', '..')) || is_link($root_lang_dir . '/' . $file))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
logging('DEBUG', sprintf(_("Lang directory '%s' found"), $file));
|
|
||||||
|
|
||||||
// Check LC_MESSAGES directory exists
|
|
||||||
$lang = $file;
|
|
||||||
$lang_dir = $root_lang_dir . '/' . $file . '/LC_MESSAGES' ;
|
|
||||||
if (!is_dir($lang_dir)) {
|
|
||||||
logging('DEBUG', sprintf(
|
|
||||||
_("LC_MESSAGES directory not found in lang '%s' directory, ignore it."),
|
|
||||||
$lang)
|
|
||||||
);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Test .PO file is present
|
|
||||||
$po_file = $lang_dir . '/' . TEXT_DOMAIN . '.po';
|
|
||||||
if (!is_file($po_file)) {
|
|
||||||
logging('DEBUG', sprintf(
|
|
||||||
_("PO file not found in lang '%s' directory, ignore it."),
|
|
||||||
$lang)
|
|
||||||
);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
$mo_file = preg_replace('/\.po$/', '.mo', $po_file);
|
|
||||||
|
|
||||||
// Compile messages from PO file to MO file using msgfmt
|
|
||||||
$result = run_external_command(
|
|
||||||
array("msgfmt", "-o", $mo_file, $po_file)
|
|
||||||
);
|
|
||||||
if (!is_array($result) || $result[0] != 0) {
|
|
||||||
logging('ERROR', sprintf(
|
|
||||||
_("Fail to compile messages from %s PO file as MO file using msgfmt (%s)."),
|
|
||||||
$lang, $po_file)
|
|
||||||
);
|
|
||||||
$error = True;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
closedir($dh);
|
|
||||||
return !$error;
|
|
||||||
}
|
|
||||||
|
|
||||||
logging('FATAL', sprintf(_("Fail to open root lang directory (%s)."), $root_dir_path));
|
|
||||||
}
|
|
||||||
add_cli_command(
|
|
||||||
'compile_messages',
|
|
||||||
'cli_compile_messages',
|
|
||||||
___("Compile messages from existing translation PO lang files to corresponding MO files"),
|
|
||||||
null,
|
|
||||||
___("This command could be used to compile PO files in lang/*/LC_MESSAGES directories to MO files.")
|
|
||||||
);
|
|
||||||
|
|
|
@ -49,6 +49,7 @@ $status_list = array (
|
||||||
|
|
||||||
require_once('hooks.php');
|
require_once('hooks.php');
|
||||||
require_once('cli.php');
|
require_once('cli.php');
|
||||||
|
require_once('translation-cli.php');
|
||||||
require_once('smarty.php');
|
require_once('smarty.php');
|
||||||
require_once('url.php');
|
require_once('url.php');
|
||||||
require_once('url-helpers.php');
|
require_once('url-helpers.php');
|
||||||
|
|
404
includes/translation-cli.php
Normal file
404
includes/translation-cli.php
Normal file
|
@ -0,0 +1,404 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
********************************************************************
|
||||||
|
* Translations CLI commands *
|
||||||
|
********************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (php_sapi_name() != "cli")
|
||||||
|
return true;
|
||||||
|
|
||||||
|
function po2json($locale, $path) {
|
||||||
|
$fileHandler = new \Sepia\PoParser\SourceHandler\FileSystem($path);
|
||||||
|
$poparser = new \Sepia\PoParser\Parser($fileHandler);
|
||||||
|
$catalog = $poparser->parse();
|
||||||
|
$headers = $catalog->getHeader();
|
||||||
|
|
||||||
|
$messages = array();
|
||||||
|
foreach ($catalog->getEntries() as $entry) {
|
||||||
|
// msg id json format
|
||||||
|
$msg = $entry->getMsgStr();
|
||||||
|
if ($entry->isPlural())
|
||||||
|
$msg = array($msg, $entry->getMsgIdPlural());
|
||||||
|
$messages[$entry->getMsgId()] = $msg;
|
||||||
|
}
|
||||||
|
return json_encode(array(
|
||||||
|
'messages' => $messages,
|
||||||
|
'locale' => $locale,
|
||||||
|
'domain' => TEXT_DOMAIN,
|
||||||
|
'plural_expr' => '(n > 1)',
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Command to extract messages from PHP/JS & template files and
|
||||||
|
* generate the lang/messages.pot file.
|
||||||
|
*
|
||||||
|
* @param array $command_args The command arguments
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function cli_extract_messages($command_args) {
|
||||||
|
global $root_dir_path, $root_lang_dir, $smarty_templates_dir;
|
||||||
|
|
||||||
|
// List PHP files to parse
|
||||||
|
$php_files = run_external_command(
|
||||||
|
array('find', escapeshellarg($root_dir_path), '-name', "'*.php'"),
|
||||||
|
null, // no STDIN data
|
||||||
|
false // do not escape command args (already done)
|
||||||
|
);
|
||||||
|
if (!is_array($php_files) || $php_files[0] != 0) {
|
||||||
|
logging('FATAL', _("Fail to list PHP files."));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Extract messages from PHP files using xgettext
|
||||||
|
$result = run_external_command(
|
||||||
|
array(
|
||||||
|
"xgettext",
|
||||||
|
"--from-code utf-8",
|
||||||
|
"--language=PHP",
|
||||||
|
"-o", "$root_lang_dir/php-messages.pot", // Output
|
||||||
|
"--omit-header", // No POT header
|
||||||
|
"--keyword=___", // Handle custom ___() translation function
|
||||||
|
"--files=-" // Read files to parse from STDIN
|
||||||
|
),
|
||||||
|
$php_files[1] // Pass PHP files list via STDIN
|
||||||
|
);
|
||||||
|
if (!is_array($result) || $result[0] != 0)
|
||||||
|
logging('FATAL', _("Fail to extract messages from PHP files using xgettext."));
|
||||||
|
|
||||||
|
|
||||||
|
// List JS files to parse
|
||||||
|
$js_files = run_external_command(
|
||||||
|
array('find', escapeshellarg("$root_dir_path/public_html/js"), '-name', "'*.js'"),
|
||||||
|
null, // no STDIN data
|
||||||
|
false // do not escape command args (already done)
|
||||||
|
);
|
||||||
|
if (!is_array($js_files) || $js_files[0] != 0) {
|
||||||
|
logging('FATAL', _("Fail to list JS files."));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Extract messages from JS files using xgettext
|
||||||
|
$result = run_external_command(
|
||||||
|
array(
|
||||||
|
"xgettext",
|
||||||
|
"--from-code utf-8",
|
||||||
|
"--language=JavaScript",
|
||||||
|
"-o", "$root_lang_dir/js-messages.pot", // Output
|
||||||
|
"--omit-header", // No POT header
|
||||||
|
"--keyword=___", // Handle custom ___() translation function
|
||||||
|
"--files=-" // Read files to parse from STDIN
|
||||||
|
),
|
||||||
|
$js_files[1] // Pass JS files list via STDIN
|
||||||
|
);
|
||||||
|
if (!is_array($result) || $result[0] != 0)
|
||||||
|
logging('FATAL', _("Fail to extract messages from JS files using xgettext."));
|
||||||
|
|
||||||
|
// Extract messages from templates files using tsmarty2c.php
|
||||||
|
$result = run_external_command(
|
||||||
|
array (
|
||||||
|
"$root_dir_path/vendor/bin/tsmarty2c.php",
|
||||||
|
"-o", "$root_lang_dir/templates-messages.pot",
|
||||||
|
$smarty_templates_dir,
|
||||||
|
)
|
||||||
|
);
|
||||||
|
if (!is_array($result) || $result[0] != 0)
|
||||||
|
logging(
|
||||||
|
'FATAL',
|
||||||
|
_("Fail to extract messages from template files using tsmarty2c.php script."));
|
||||||
|
|
||||||
|
$fd = fopen("$root_lang_dir/headers.pot", 'w');
|
||||||
|
$headers = array(
|
||||||
|
'msgid ""',
|
||||||
|
'msgstr ""',
|
||||||
|
'"POT-Creation-Date: '.date('Y-m-d H:iO').'\n"',
|
||||||
|
'"PO-Revision-Date: '.date('Y-m-d H:iO').'\n"',
|
||||||
|
'"MIME-Version: 1.0\n"',
|
||||||
|
'"Content-Type: text/plain; charset=utf-8\n"',
|
||||||
|
'"Content-Transfer-Encoding: 8bit\n"',
|
||||||
|
);
|
||||||
|
fwrite($fd, implode("\n", $headers));
|
||||||
|
fclose($fd);
|
||||||
|
|
||||||
|
// Merge previous results in messages.pot file using msgcat
|
||||||
|
$result = run_external_command(array(
|
||||||
|
'msgcat',
|
||||||
|
"$root_lang_dir/headers.pot",
|
||||||
|
"$root_lang_dir/php-messages.pot",
|
||||||
|
"$root_lang_dir/js-messages.pot",
|
||||||
|
"$root_lang_dir/templates-messages.pot",
|
||||||
|
"-t", "utf-8", "--use-first",
|
||||||
|
"-o", "$root_lang_dir/messages.pot",
|
||||||
|
));
|
||||||
|
if (!is_array($result) || $result[0] != 0)
|
||||||
|
logging('FATAL', _("Fail to merge messages using msgcat."));
|
||||||
|
}
|
||||||
|
add_cli_command(
|
||||||
|
'extract_messages',
|
||||||
|
'cli_extract_messages',
|
||||||
|
___("Extract messages that need to be translated"),
|
||||||
|
null,
|
||||||
|
___("This command could be used to generate/update lang/messages.pot file.")
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Command to update messages from lang/messages.pot file to
|
||||||
|
* all PO file in lang/[lang]/LC_MESSAGES.
|
||||||
|
*
|
||||||
|
* @param array $command_args The command arguments
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function cli_update_messages($command_args) {
|
||||||
|
global $root_dir_path, $root_lang_dir, $smarty_templates_dir;
|
||||||
|
|
||||||
|
$compendium_args = array();
|
||||||
|
foreach ($command_args as $path) {
|
||||||
|
if (!file_exists($path))
|
||||||
|
logging(
|
||||||
|
'FATAL', sprintf(
|
||||||
|
_("Compendium file %s not found."),
|
||||||
|
$path
|
||||||
|
)
|
||||||
|
);
|
||||||
|
$compendium_args[] = '-C';
|
||||||
|
$compendium_args[] = $path;
|
||||||
|
}
|
||||||
|
|
||||||
|
$pot_file = "$root_lang_dir/messages.pot";
|
||||||
|
if (!is_file($pot_file))
|
||||||
|
logging(
|
||||||
|
'FATAL', sprintf(
|
||||||
|
_("POT file not found (%s). Please run extract_messages first."),
|
||||||
|
$pot_file
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($dh = opendir($root_lang_dir)) {
|
||||||
|
$error = False;
|
||||||
|
while (($file = readdir($dh)) !== false) {
|
||||||
|
if (
|
||||||
|
!is_dir($root_lang_dir . '/' . $file) ||
|
||||||
|
in_array($file, array('.', '..')) ||
|
||||||
|
is_link($root_lang_dir . '/' . $file)
|
||||||
|
)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
logging('DEBUG', sprintf(_("Lang directory '%s' found"), $file));
|
||||||
|
|
||||||
|
// Check LC_MESSAGES directory exists
|
||||||
|
$lang = $file;
|
||||||
|
$lang_dir = $root_lang_dir . '/' . $file . '/LC_MESSAGES' ;
|
||||||
|
if (!is_dir($lang_dir)) {
|
||||||
|
logging('DEBUG', sprintf(
|
||||||
|
_("LC_MESSAGES directory not found in lang '%s' directory, ignore it."),
|
||||||
|
$lang)
|
||||||
|
);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$po_file = $lang_dir . '/' . TEXT_DOMAIN . '.po';
|
||||||
|
$created = false;
|
||||||
|
if (!is_file($po_file)) {
|
||||||
|
// Init PO file from POT file using msginit
|
||||||
|
$result = run_external_command(
|
||||||
|
array("msginit", "-i", "$pot_file", "-l", "$lang", "-o", $po_file)
|
||||||
|
);
|
||||||
|
if (is_array($result) && $result[0] == 0) {
|
||||||
|
$created = true;
|
||||||
|
} else {
|
||||||
|
logging('ERROR', sprintf(
|
||||||
|
_("Fail to init messages in %s PO file using msginit (%s)."),
|
||||||
|
$lang, $po_file)
|
||||||
|
);
|
||||||
|
$error = True;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update messages in PO file from POT file using msgmerge
|
||||||
|
// Note: msginit does not accept compendium files, so we also run
|
||||||
|
// msgmerge on creation with compendium file(s).
|
||||||
|
if (is_file($po_file) && (!$created || $compendium_args)) {
|
||||||
|
$result = run_external_command(
|
||||||
|
array_merge(
|
||||||
|
array("msgmerge", "-q", "-U"),
|
||||||
|
$compendium_args,
|
||||||
|
array($po_file, $pot_file)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
if (!is_array($result) || $result[0] != 0) {
|
||||||
|
logging('ERROR', sprintf(
|
||||||
|
_("Fail to update messages in %s PO file using msgmerge (%s)."),
|
||||||
|
$lang, $po_file)
|
||||||
|
);
|
||||||
|
$error = True;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elseif (!$created) {
|
||||||
|
logging('DEBUG', sprintf(
|
||||||
|
_("PO file not found in lang '%s' directory, ignore it."),
|
||||||
|
$lang)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
closedir($dh);
|
||||||
|
return !$error;
|
||||||
|
}
|
||||||
|
|
||||||
|
logging('FATAL', sprintf(_("Fail to open root lang directory (%s)."), $root_dir_path));
|
||||||
|
}
|
||||||
|
add_cli_command(
|
||||||
|
'update_messages',
|
||||||
|
'cli_update_messages',
|
||||||
|
___("Update messages in translation PO lang files"),
|
||||||
|
null,
|
||||||
|
___("This command could be used to init/update PO files in lang/*/LC_MESSAGES directories.")
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Command to compile messages from existing translation PO lang files
|
||||||
|
* to corresponding MO files and as JSON catalog (for translation in JS).
|
||||||
|
*
|
||||||
|
* @param array $command_args The command arguments
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function cli_compile_messages($command_args) {
|
||||||
|
global $root_dir_path, $root_lang_dir, $smarty_templates_dir;
|
||||||
|
|
||||||
|
if ($dh = opendir($root_lang_dir)) {
|
||||||
|
$error = False;
|
||||||
|
while (($file = readdir($dh)) !== false) {
|
||||||
|
if (
|
||||||
|
!is_dir($root_lang_dir . '/' . $file) ||
|
||||||
|
in_array($file, array('.', '..'))
|
||||||
|
)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (is_link($root_lang_dir . '/' . $file)) {
|
||||||
|
$real_lang_dir = readlink($root_lang_dir . '/' . $file);
|
||||||
|
if (dirname($real_lang_dir) != '.' || !is_dir($root_lang_dir . '/' . $real_lang_dir))
|
||||||
|
continue;
|
||||||
|
$lang = $file;
|
||||||
|
logging('DEBUG', sprintf(_("Lang alias symlink found: %s -> %s"), $lang, $real_lang_dir));
|
||||||
|
|
||||||
|
// Create JSON catalog symlink (if not exists)
|
||||||
|
$json_link = "$root_dir_path/public_html/translations/$lang.json";
|
||||||
|
$link_target = "$real_lang_dir.json";
|
||||||
|
if (!file_exists($json_link)) {
|
||||||
|
if (symlink($link_target, $json_link)) {
|
||||||
|
logging(
|
||||||
|
'INFO',
|
||||||
|
sprintf(
|
||||||
|
_("JSON catalog symlink for %s -> %s created (%s)"),
|
||||||
|
$lang, $real_lang_dir, $json_link)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
logging(
|
||||||
|
'ERROR',
|
||||||
|
sprintf(
|
||||||
|
_("Fail to create JSON catalog symlink for %s -> %s (%s)"),
|
||||||
|
$lang, $real_lang_dir, $json_link)
|
||||||
|
);
|
||||||
|
$error = True;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elseif (readlink($json_link) == $link_target) {
|
||||||
|
logging(
|
||||||
|
'DEBUG',
|
||||||
|
sprintf(
|
||||||
|
_("JSON catalog symlink for %s -> %s already exist (%s)"),
|
||||||
|
$lang, $real_lang_dir, $json_link)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
logging(
|
||||||
|
'WARNING',
|
||||||
|
sprintf(
|
||||||
|
_("JSON catalog file for %s already exist, but it's not a symlink to %s (%s)"),
|
||||||
|
$lang, $real_lang_dir, $json_link)
|
||||||
|
);
|
||||||
|
$error = True;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
logging('DEBUG', sprintf(_("Lang directory '%s' found"), $file));
|
||||||
|
|
||||||
|
// Check LC_MESSAGES directory exists
|
||||||
|
$lang = $file;
|
||||||
|
$lang_dir = $root_lang_dir . '/' . $file . '/LC_MESSAGES' ;
|
||||||
|
if (!is_dir($lang_dir)) {
|
||||||
|
logging('DEBUG', sprintf(
|
||||||
|
_("LC_MESSAGES directory not found in lang '%s' directory, ignore it."),
|
||||||
|
$lang)
|
||||||
|
);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test .PO file is present
|
||||||
|
$po_file = $lang_dir . '/' . TEXT_DOMAIN . '.po';
|
||||||
|
if (!is_file($po_file)) {
|
||||||
|
logging('DEBUG', sprintf(
|
||||||
|
_("PO file not found in lang '%s' directory, ignore it."),
|
||||||
|
$lang)
|
||||||
|
);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$mo_file = preg_replace('/\.po$/', '.mo', $po_file);
|
||||||
|
|
||||||
|
// Compile messages from PO file to MO file using msgfmt
|
||||||
|
$result = run_external_command(
|
||||||
|
array("msgfmt", "-o", $mo_file, $po_file)
|
||||||
|
);
|
||||||
|
if (!is_array($result) || $result[0] != 0) {
|
||||||
|
logging('ERROR', sprintf(
|
||||||
|
_("Fail to compile messages from %s PO file as MO file using msgfmt (%s)."),
|
||||||
|
$lang, $po_file)
|
||||||
|
);
|
||||||
|
$error = True;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Compile messages from PO file to JSON catalog file
|
||||||
|
$json_catalog = po2json($lang, $po_file);
|
||||||
|
$json_file = "$root_dir_path/public_html/translations/$lang.json";
|
||||||
|
if(!$fd = fopen($json_file, 'w')) {
|
||||||
|
logging('ERROR', sprintf(
|
||||||
|
_("Fail to open %s JSON catalog file in write mode (%s)."),
|
||||||
|
$lang, $json_file)
|
||||||
|
);
|
||||||
|
$error = True;
|
||||||
|
}
|
||||||
|
elseif (fwrite($fd, $json_catalog) === false) {
|
||||||
|
logging('ERROR', sprintf(
|
||||||
|
_("Fail to write %s JSON catalog in file (%s)."),
|
||||||
|
$lang, $json_file)
|
||||||
|
);
|
||||||
|
$error = True;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
logging('INFO', sprintf(
|
||||||
|
_("%s JSON catalog writed (%s)."),
|
||||||
|
$lang, $json_file)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
closedir($dh);
|
||||||
|
|
||||||
|
return !$error;
|
||||||
|
}
|
||||||
|
logging('FATAL', sprintf(_("Fail to open root lang directory (%s)."), $root_dir_path));
|
||||||
|
}
|
||||||
|
add_cli_command(
|
||||||
|
'compile_messages',
|
||||||
|
'cli_compile_messages',
|
||||||
|
___(
|
||||||
|
"Compile messages from existing translation PO lang files to ".
|
||||||
|
"corresponding MO files and JSON catalogs"
|
||||||
|
),
|
||||||
|
null,
|
||||||
|
___(
|
||||||
|
"This command could be used to compile PO files in lang/*/LC_MESSAGES ".
|
||||||
|
"directories to MO files and as JSON catalogs in public_html/translations."
|
||||||
|
)
|
||||||
|
);
|
|
@ -3,13 +3,13 @@
|
||||||
// Gettext text domain
|
// Gettext text domain
|
||||||
define('TEXT_DOMAIN', 'DEFAULT');
|
define('TEXT_DOMAIN', 'DEFAULT');
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* List available translation languages
|
* List available translation languages
|
||||||
*
|
*
|
||||||
* @param[in] $as_locales boolean If true, locale names will be return instead
|
* @param $as_locales boolean If true, locale names will be return instead
|
||||||
* of primary languages (optional, default: false)
|
* of primary languages (optional, default: false)
|
||||||
*
|
*
|
||||||
* @retval array Array of available translation languages (or locales)
|
* @return array Array of available translation languages (or locales)
|
||||||
*/
|
*/
|
||||||
function get_available_langs($as_locales=false) {
|
function get_available_langs($as_locales=false) {
|
||||||
global $root_lang_dir;
|
global $root_lang_dir;
|
||||||
|
@ -35,14 +35,14 @@ function get_available_langs($as_locales=false) {
|
||||||
return $langs;
|
return $langs;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Get locale name corresponding to specified translation language
|
* Get locale name corresponding to specified translation language
|
||||||
*
|
*
|
||||||
* @param[in] $lang string The translation language
|
* @param $lang string The translation language
|
||||||
* @param[in] $default string|null Default locale name to return if any available translation
|
* @param $default string|null Default locale name to return if any available translation
|
||||||
* locales matched with the specified language
|
* locales matched with the specified language
|
||||||
* (optional, default: $default_locale)
|
* (optional, default: $default_locale)
|
||||||
* return string Corresponding locale
|
* @return string Corresponding locale
|
||||||
*/
|
*/
|
||||||
function lang2locale($lang, $default=null) {
|
function lang2locale($lang, $default=null) {
|
||||||
global $default_locale;
|
global $default_locale;
|
||||||
|
@ -56,21 +56,27 @@ function lang2locale($lang, $default=null) {
|
||||||
return $default;
|
return $default;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper function: just mark message to translation
|
/**
|
||||||
|
* Helper function: just mark message for translation
|
||||||
|
*
|
||||||
|
* @param string $msg The message to translate
|
||||||
|
*
|
||||||
|
* @return string The message without transformation
|
||||||
|
*/
|
||||||
function ___($msg) {
|
function ___($msg) {
|
||||||
return $msg;
|
return $msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Initialize translation system
|
* Initialize translation system
|
||||||
*
|
*
|
||||||
* Detect best translation language and configure the translation
|
* Detect best translation language and configure the translation
|
||||||
* system.
|
* system.
|
||||||
*
|
*
|
||||||
* @retval void
|
* @return void
|
||||||
*/
|
*/
|
||||||
function init_translation() {
|
function init_translation() {
|
||||||
global $root_dir_path, $root_lang_dir, $default_locale;
|
global $root_dir_path, $root_lang_dir, $default_locale, $smarty;
|
||||||
$root_lang_dir = "$root_dir_path/lang";
|
$root_lang_dir = "$root_dir_path/lang";
|
||||||
|
|
||||||
if (!class_exists('Locale')) {
|
if (!class_exists('Locale')) {
|
||||||
|
@ -132,4 +138,12 @@ function init_translation() {
|
||||||
logging('TRACE', "Text domain fullpath is '$fullpath'.");
|
logging('TRACE', "Text domain fullpath is '$fullpath'.");
|
||||||
logging('TRACE', "Text domain is '".textdomain(TEXT_DOMAIN)."'.");
|
logging('TRACE', "Text domain is '".textdomain(TEXT_DOMAIN)."'.");
|
||||||
logging('TRACE', "Test: "._('Hello world !'));
|
logging('TRACE', "Test: "._('Hello world !'));
|
||||||
|
|
||||||
|
// JS translation file
|
||||||
|
$json_translation_file = "translations/$lang.json";
|
||||||
|
if (php_sapi_name() != "cli" && is_file("$root_dir_path/public_html/$json_translation_file")) {
|
||||||
|
add_js_file("lib/babel.js");
|
||||||
|
add_js_file("js/translation.js");
|
||||||
|
$smarty->assign('lang', $lang);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
|
@ -1,3 +1,17 @@
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: \n"
|
||||||
|
"POT-Creation-Date: 2022-04-24 16:39+0200\n"
|
||||||
|
"PO-Revision-Date: \n"
|
||||||
|
"Last-Translator: Benjamin Renard <brenard@easter-eggs.com>\n"
|
||||||
|
"Language-Team: \n"
|
||||||
|
"Language: fr_FR\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Generator: Poedit 2.4.2\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/url-helpers.php:5
|
#: /home/brenard/dev/eesyphp/includes/url-helpers.php:5
|
||||||
msgid "Invalid element identifier."
|
msgid "Invalid element identifier."
|
||||||
msgstr "Identifiant d'élément invalide."
|
msgstr "Identifiant d'élément invalide."
|
||||||
|
@ -22,7 +36,7 @@ msgid "An error occurred while viewing this page."
|
||||||
msgstr "Une erreur est survenue en affichant cette page."
|
msgstr "Une erreur est survenue en affichant cette page."
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/url-public.php:7
|
#: /home/brenard/dev/eesyphp/includes/url-public.php:7
|
||||||
#: /home/brenard/dev/eesyphp/includes/translation.php:134
|
#: /home/brenard/dev/eesyphp/includes/translation.php:140
|
||||||
msgid "Hello world !"
|
msgid "Hello world !"
|
||||||
msgstr "Bonjour tout le monde !"
|
msgstr "Bonjour tout le monde !"
|
||||||
|
|
||||||
|
@ -39,7 +53,6 @@ msgstr ""
|
||||||
"merci de prendre contact avec le support."
|
"merci de prendre contact avec le support."
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/url-public.php:96
|
#: /home/brenard/dev/eesyphp/includes/url-public.php:96
|
||||||
#: /home/brenard/dev/eesyphp/templates/search.tpl:22
|
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr "Rechercher"
|
msgstr "Rechercher"
|
||||||
|
|
||||||
|
@ -150,6 +163,181 @@ msgstr "Refusé"
|
||||||
msgid "Archived"
|
msgid "Archived"
|
||||||
msgstr "Archivé"
|
msgstr "Archivé"
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:51
|
||||||
|
msgid "Fail to list PHP files."
|
||||||
|
msgstr "Impossible de lister les fichiers PHP."
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:68
|
||||||
|
msgid "Fail to extract messages from PHP files using xgettext."
|
||||||
|
msgstr ""
|
||||||
|
"Impossible d'extraire les messages depuis les fichiers PHP en utilisant "
|
||||||
|
"xgettext."
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:78
|
||||||
|
msgid "Fail to list JS files."
|
||||||
|
msgstr "Impossible de lister les fichiers JS."
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:95
|
||||||
|
msgid "Fail to extract messages from JS files using xgettext."
|
||||||
|
msgstr ""
|
||||||
|
"Impossible d'extraire les messages depuis les fichiers JS en utilisant "
|
||||||
|
"xgettext."
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:108
|
||||||
|
msgid ""
|
||||||
|
"Fail to extract messages from template files using tsmarty2c.php script."
|
||||||
|
msgstr ""
|
||||||
|
"Impossible d'extraire les messages depuis les fichiers template en utilisant "
|
||||||
|
"le script tsmarty2c.php."
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:134
|
||||||
|
msgid "Fail to merge messages using msgcat."
|
||||||
|
msgstr "Impossible de fusionner les messages en utilisant msgcat."
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:139
|
||||||
|
msgid "Extract messages that need to be translated"
|
||||||
|
msgstr "Extraire les messages devant être traduit"
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:141
|
||||||
|
msgid "This command could be used to generate/update lang/messages.pot file."
|
||||||
|
msgstr ""
|
||||||
|
"Cette commande peut-être utilisée pour générer/mettre à jour le fichier lang/"
|
||||||
|
"messages.pot."
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:159
|
||||||
|
#, php-format
|
||||||
|
msgid "Compendium file %s not found."
|
||||||
|
msgstr "Fichier compendium %s introuvable."
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:171
|
||||||
|
#, php-format
|
||||||
|
msgid "POT file not found (%s). Please run extract_messages first."
|
||||||
|
msgstr ""
|
||||||
|
"Fichier POT introuvable (%s). Merci de lancer la commande extract_messages "
|
||||||
|
"pour commencer."
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:186
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:325
|
||||||
|
#, php-format
|
||||||
|
msgid "Lang directory '%s' found"
|
||||||
|
msgstr "Dossier de langue '%s' trouvé"
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:193
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:332
|
||||||
|
#, php-format
|
||||||
|
msgid "LC_MESSAGES directory not found in lang '%s' directory, ignore it."
|
||||||
|
msgstr ""
|
||||||
|
"Le dossier LC_MESSAGES est introuvable dans le dossier de langue '%s', on "
|
||||||
|
"l'ignore."
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:210
|
||||||
|
#, php-format
|
||||||
|
msgid "Fail to init messages in %s PO file using msginit (%s)."
|
||||||
|
msgstr ""
|
||||||
|
"Impossible d'initialiser les messages dans le fichier PO %s en utilisant "
|
||||||
|
"msginit (%s)."
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:230
|
||||||
|
#, php-format
|
||||||
|
msgid "Fail to update messages in %s PO file using msgmerge (%s)."
|
||||||
|
msgstr ""
|
||||||
|
"Impossible de mettre à jour les messages dans les fichiers PO %s en "
|
||||||
|
"utilisant msgmerge (%s)."
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:238
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:342
|
||||||
|
#, php-format
|
||||||
|
msgid "PO file not found in lang '%s' directory, ignore it."
|
||||||
|
msgstr ""
|
||||||
|
"Le fichier PO est introuvable dans le dossier de langue '%s', on l'ignore."
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:247
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:390
|
||||||
|
#, php-format
|
||||||
|
msgid "Fail to open root lang directory (%s)."
|
||||||
|
msgstr "Impossible d'ouvrir le dossier racine des langues (%s)."
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:252
|
||||||
|
msgid "Update messages in translation PO lang files"
|
||||||
|
msgstr ""
|
||||||
|
"Mettre à jour les messages dans les fichiers de traduction PO existants"
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:254
|
||||||
|
msgid ""
|
||||||
|
"This command could be used to init/update PO files in lang/*/LC_MESSAGES "
|
||||||
|
"directories."
|
||||||
|
msgstr ""
|
||||||
|
"Cette commande peut-être utilisée pour initialiser/mettre à jour les "
|
||||||
|
"fichiers PO les dossiers lang/*/LC_MESSAGES."
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:281
|
||||||
|
#, php-format
|
||||||
|
msgid "Lang alias symlink found: %s -> %s"
|
||||||
|
msgstr "Lien symbolique d'alias de langue trouvé : %s -> %s"
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:291
|
||||||
|
#, php-format
|
||||||
|
msgid "JSON catalog symlink for %s -> %s created (%s)"
|
||||||
|
msgstr "Lien symbolique de catalogue JSON pour %s -> %s créé (%s)"
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:299
|
||||||
|
#, php-format
|
||||||
|
msgid "Fail to create JSON catalog symlink for %s -> %s (%s)"
|
||||||
|
msgstr ""
|
||||||
|
"Impossible de créer le lien symbolique de catalogue JSON pour %s -> %s (%s)"
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:309
|
||||||
|
#, php-format
|
||||||
|
msgid "JSON catalog symlink for %s -> %s already exist (%s)"
|
||||||
|
msgstr "Le lien symbolique du catalogue JSON pour %s -> %s existe déjà (%s)"
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:317
|
||||||
|
#, php-format
|
||||||
|
msgid ""
|
||||||
|
"JSON catalog file for %s already exist, but it's not a symlink to %s (%s)"
|
||||||
|
msgstr ""
|
||||||
|
"Le catalogue JSON pour %s existe, mais il ne s'agit par d'un lien symbolique "
|
||||||
|
"vers %s (%s)"
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:356
|
||||||
|
#, php-format
|
||||||
|
msgid "Fail to compile messages from %s PO file as MO file using msgfmt (%s)."
|
||||||
|
msgstr ""
|
||||||
|
"Impossible de compiler les messages depuis le fichier PO %s en tant que "
|
||||||
|
"fichier MO en utilisant msgfmt (%s)."
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:367
|
||||||
|
#, php-format
|
||||||
|
msgid "Fail to open %s JSON catalog file in write mode (%s)."
|
||||||
|
msgstr "Impossible d'ouvrir le catalogue JSON %s en mode écriture (%s)."
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:374
|
||||||
|
#, php-format
|
||||||
|
msgid "Fail to write %s JSON catalog in file (%s)."
|
||||||
|
msgstr "Impossible d'écrire le fichier du catalogue JSON %s (%s)."
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:381
|
||||||
|
#, php-format
|
||||||
|
msgid "%s JSON catalog writed (%s)."
|
||||||
|
msgstr "Catalogue JSON %s créé (%s)."
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:396
|
||||||
|
msgid ""
|
||||||
|
"Compile messages from existing translation PO lang files to corresponding MO "
|
||||||
|
"files and JSON catalogs"
|
||||||
|
msgstr ""
|
||||||
|
"Compiler les messages depuis les fichiers PO de traduction existants vers "
|
||||||
|
"les fichiers MO et les catalogues JSON correspondant"
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:401
|
||||||
|
msgid ""
|
||||||
|
"This command could be used to compile PO files in lang/*/LC_MESSAGES "
|
||||||
|
"directories to MO files and as JSON catalogs in public_html/translations."
|
||||||
|
msgstr ""
|
||||||
|
"Cette commande peut-être utilisée pour compiler les fichiers PO dans les "
|
||||||
|
"dossiers lang/*/LC_MESSAGES en fichiers MO and en tant que catalogues JSON "
|
||||||
|
"dans public_html/translations."
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/mail.php:12
|
#: /home/brenard/dev/eesyphp/includes/mail.php:12
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid ""
|
msgid ""
|
||||||
|
@ -388,127 +576,54 @@ msgid "-m/--max-age Item expiration limit (in days, optional)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"-m/--max-age Limite d'expiration des éléments (en secondes, optionnel)"
|
"-m/--max-age Limite d'expiration des éléments (en secondes, optionnel)"
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:393
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:4
|
||||||
msgid "Fail to list PHP files."
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:171
|
||||||
msgstr "Impossible de lister les fichiers PHP."
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:200
|
||||||
|
msgid "Confirmation"
|
||||||
|
msgstr "Confirmation"
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:410
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:5
|
||||||
msgid "Fail to extract messages from PHP files using xgettext."
|
msgid "Do you confirm?"
|
||||||
msgstr ""
|
msgstr "Confirmez-vous ?"
|
||||||
"Impossible d'extraire les messages depuis les fichiers PHP en utilisant "
|
|
||||||
"xgettext."
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:421
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:11
|
||||||
msgid ""
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:108
|
||||||
"Fail to extract messages from template files using tsmarty2c.php script."
|
msgid "Cancel"
|
||||||
msgstr ""
|
msgstr "Annuler"
|
||||||
"Impossible d'extraire les messages depuis les fichiers template en utilisant "
|
|
||||||
"le script tsmarty2c.php."
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:431
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:17
|
||||||
msgid "Fail to merge messages using msgcat."
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:114
|
||||||
msgstr "Impossible de fusionner les messages en utilisant msgcat."
|
msgid "Validate"
|
||||||
|
msgstr "Valider"
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:436
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:44
|
||||||
msgid "Extract messages that need to be translated"
|
msgid "Error"
|
||||||
msgstr "Extraire les messages devant être traduit"
|
msgstr "Erreur"
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:438
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:52
|
||||||
msgid "This command could be used to generate/update lang/messages.pot file."
|
msgid "OK"
|
||||||
msgstr ""
|
msgstr "OK"
|
||||||
"Cette commande peut-être utilisée pour générer/mettre à jour le fichier lang/"
|
|
||||||
"messages.pot."
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:449
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:91
|
||||||
#, php-format
|
msgid "Question"
|
||||||
msgid "POT file not found (%s). Please run extract_messages first."
|
msgstr "Question"
|
||||||
msgstr ""
|
|
||||||
"Fichier POT introuvable (%s). Merci de lancer la commande extract_messages "
|
|
||||||
"pour commencer."
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:460
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:92
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:519
|
msgid "Please enter your answer below:"
|
||||||
#, php-format
|
msgstr "Merci de saisir vos réponses ci-dessous :"
|
||||||
msgid "Lang directory '%s' found"
|
|
||||||
msgstr "Dossier de langue '%s' trouvé"
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:467
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:143
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:526
|
msgid "Please wait"
|
||||||
#, php-format
|
msgstr "Merci de patienter"
|
||||||
msgid "LC_MESSAGES directory not found in lang '%s' directory, ignore it."
|
|
||||||
msgstr ""
|
|
||||||
"Le dossier LC_MESSAGES est introuvable dans le dossier de langue '%s', on "
|
|
||||||
"l'ignore."
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:477
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:144
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:536
|
msgid "Please wait while your request is being processed."
|
||||||
#, php-format
|
msgstr "Merci de patienter pendant le traitement de votre requête."
|
||||||
msgid "PO file not found in lang '%s' directory, ignore it."
|
|
||||||
msgstr ""
|
|
||||||
"Le fichier PO est introuvable dans le dossier de langue '%s', on l'ignore."
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:489
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:172
|
||||||
#, php-format
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:201
|
||||||
msgid "Fail to update messages in %s PO file using msgmerge (%s)."
|
msgid "Are you sure?"
|
||||||
msgstr ""
|
msgstr "Êtes-vous sure ?"
|
||||||
"Impossible de mettre à jour les messages dans les fichiers PO %s en "
|
|
||||||
"utilisant msgmerge (%s)."
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:499
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:560
|
|
||||||
#, php-format
|
|
||||||
msgid "Fail to open root lang directory (%s)."
|
|
||||||
msgstr "Impossible d'ouvrir le dossier racine des langues (%s)."
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:504
|
|
||||||
msgid "Update messages in existing translation PO lang files"
|
|
||||||
msgstr ""
|
|
||||||
"Mettre à jour les messages dans les fichiers de traduction PO existants"
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:506
|
|
||||||
msgid ""
|
|
||||||
"This command could be used to update PO files in lang/*/LC_MESSAGES "
|
|
||||||
"directories."
|
|
||||||
msgstr ""
|
|
||||||
"Cette commande peut-être utilisée pour mettre à jour les fichiers PO les "
|
|
||||||
"dossiers lang/*/LC_MESSAGES."
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:550
|
|
||||||
#, php-format
|
|
||||||
msgid "Fail to compile messages from %s PO file as MO file using msgfmt (%s)."
|
|
||||||
msgstr ""
|
|
||||||
"Impossible de compiler les messages depuis le fichier PO %s en tant que "
|
|
||||||
"fichier MO en utilisant msgfmt (%s)."
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:565
|
|
||||||
msgid ""
|
|
||||||
"Compile messages from existing translation PO lang files to corresponding MO "
|
|
||||||
"files"
|
|
||||||
msgstr ""
|
|
||||||
"Compiler les messages depuis les fichiers PO de traduction existants vers "
|
|
||||||
"les fichiers MO correspondant"
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:567
|
|
||||||
msgid ""
|
|
||||||
"This command could be used to compile PO files in lang/*/LC_MESSAGES "
|
|
||||||
"directories to MO files."
|
|
||||||
msgstr ""
|
|
||||||
"Cette commande peut-être utilisée pour compiler les fichiers PO dans les "
|
|
||||||
"dossiers lang/*/LC_MESSAGES en fichiers MO."
|
|
||||||
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: \n"
|
|
||||||
"POT-Creation-Date: \n"
|
|
||||||
"PO-Revision-Date: \n"
|
|
||||||
"Last-Translator: \n"
|
|
||||||
"Language-Team: \n"
|
|
||||||
"Language: fr_FR\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"X-Generator: Poedit 2.4.2\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/templates/form.tpl:7
|
#: /home/brenard/dev/eesyphp/templates/form.tpl:7
|
||||||
#: /home/brenard/dev/eesyphp/templates/search.tpl:36
|
#: /home/brenard/dev/eesyphp/templates/search.tpl:36
|
||||||
|
@ -610,8 +725,10 @@ msgid "No item found."
|
||||||
msgstr "Aucun élément trouvé."
|
msgstr "Aucun élément trouvé."
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/templates/search.tpl:68
|
#: /home/brenard/dev/eesyphp/templates/search.tpl:68
|
||||||
msgid "Element(s) %1 to %2 on %3"
|
msgid "%3 element"
|
||||||
msgstr "Élément(s) %1 à %2 sur %3"
|
msgid_plural "Elements %1 to %2 on %3"
|
||||||
|
msgstr[0] "%3 élément"
|
||||||
|
msgstr[1] "Éléments %1 à %2 sur %3"
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/templates/error_404.tpl:3
|
#: /home/brenard/dev/eesyphp/templates/error_404.tpl:3
|
||||||
msgid "The requested page can not be found."
|
msgid "The requested page can not be found."
|
||||||
|
@ -644,3 +761,31 @@ msgstr "Cette application contient quelques pages de démo :"
|
||||||
#: /home/brenard/dev/eesyphp/templates/homepage.tpl:9
|
#: /home/brenard/dev/eesyphp/templates/homepage.tpl:9
|
||||||
msgid "Search page"
|
msgid "Search page"
|
||||||
msgstr "Page de recherche"
|
msgstr "Page de recherche"
|
||||||
|
|
||||||
|
#~ msgid "Update messages in existing translation PO lang files"
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Mettre à jour les messages dans les fichiers de traduction PO existants"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "This command could be used to update PO files in lang/*/LC_MESSAGES "
|
||||||
|
#~ "directories."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Cette commande peut-être utilisée pour mettre à jour les fichiers PO les "
|
||||||
|
#~ "dossiers lang/*/LC_MESSAGES."
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "Compile messages from existing translation PO lang files to corresponding "
|
||||||
|
#~ "MO files"
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Compiler les messages depuis les fichiers PO de traduction existants vers "
|
||||||
|
#~ "les fichiers MO correspondant"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "This command could be used to compile PO files in lang/*/LC_MESSAGES "
|
||||||
|
#~ "directories to MO files."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Cette commande peut-être utilisée pour compiler les fichiers PO dans les "
|
||||||
|
#~ "dossiers lang/*/LC_MESSAGES en fichiers MO."
|
||||||
|
|
||||||
|
#~ msgid "Element(s) %1 to %2 on %3"
|
||||||
|
#~ msgstr "Élément(s) %1 à %2 sur %3"
|
||||||
|
|
7
lang/headers.pot
Normal file
7
lang/headers.pot
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"POT-Creation-Date: 2022-04-24 16:39+0200\n"
|
||||||
|
"PO-Revision-Date: 2022-04-24 16:39+0200\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
48
lang/js-messages.pot
Normal file
48
lang/js-messages.pot
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:4
|
||||||
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:171
|
||||||
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:200
|
||||||
|
msgid "Confirmation"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:5
|
||||||
|
msgid "Do you confirm?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:11
|
||||||
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:108
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:17
|
||||||
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:114
|
||||||
|
msgid "Validate"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:44
|
||||||
|
msgid "Error"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:52
|
||||||
|
msgid "OK"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:91
|
||||||
|
msgid "Question"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:92
|
||||||
|
msgid "Please enter your answer below:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:143
|
||||||
|
msgid "Please wait"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:144
|
||||||
|
msgid "Please wait while your request is being processed."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:172
|
||||||
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:201
|
||||||
|
msgid "Are you sure?"
|
||||||
|
msgstr ""
|
|
@ -1,3 +1,11 @@
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"POT-Creation-Date: 2022-04-24 16:39+0200\n"
|
||||||
|
"PO-Revision-Date: 2022-04-24 16:39+0200\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/url-helpers.php:5
|
#: /home/brenard/dev/eesyphp/includes/url-helpers.php:5
|
||||||
msgid "Invalid element identifier."
|
msgid "Invalid element identifier."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -22,7 +30,7 @@ msgid "An error occurred while viewing this page."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/url-public.php:7
|
#: /home/brenard/dev/eesyphp/includes/url-public.php:7
|
||||||
#: /home/brenard/dev/eesyphp/includes/translation.php:134
|
#: /home/brenard/dev/eesyphp/includes/translation.php:140
|
||||||
msgid "Hello world !"
|
msgid "Hello world !"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -37,7 +45,6 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/url-public.php:96
|
#: /home/brenard/dev/eesyphp/includes/url-public.php:96
|
||||||
#: /home/brenard/dev/eesyphp/templates/search.tpl:22
|
|
||||||
msgid "Search"
|
msgid "Search"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -144,6 +151,151 @@ msgstr ""
|
||||||
msgid "Archived"
|
msgid "Archived"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:51
|
||||||
|
msgid "Fail to list PHP files."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:68
|
||||||
|
msgid "Fail to extract messages from PHP files using xgettext."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:78
|
||||||
|
msgid "Fail to list JS files."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:95
|
||||||
|
msgid "Fail to extract messages from JS files using xgettext."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:108
|
||||||
|
msgid ""
|
||||||
|
"Fail to extract messages from template files using tsmarty2c.php script."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:134
|
||||||
|
msgid "Fail to merge messages using msgcat."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:139
|
||||||
|
msgid "Extract messages that need to be translated"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:141
|
||||||
|
msgid "This command could be used to generate/update lang/messages.pot file."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:159
|
||||||
|
#, php-format
|
||||||
|
msgid "Compendium file %s not found."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:171
|
||||||
|
#, php-format
|
||||||
|
msgid "POT file not found (%s). Please run extract_messages first."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:186
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:325
|
||||||
|
#, php-format
|
||||||
|
msgid "Lang directory '%s' found"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:193
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:332
|
||||||
|
#, php-format
|
||||||
|
msgid "LC_MESSAGES directory not found in lang '%s' directory, ignore it."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:210
|
||||||
|
#, php-format
|
||||||
|
msgid "Fail to init messages in %s PO file using msginit (%s)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:230
|
||||||
|
#, php-format
|
||||||
|
msgid "Fail to update messages in %s PO file using msgmerge (%s)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:238
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:342
|
||||||
|
#, php-format
|
||||||
|
msgid "PO file not found in lang '%s' directory, ignore it."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:247
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:390
|
||||||
|
#, php-format
|
||||||
|
msgid "Fail to open root lang directory (%s)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:252
|
||||||
|
msgid "Update messages in translation PO lang files"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:254
|
||||||
|
msgid ""
|
||||||
|
"This command could be used to init/update PO files in lang/*/LC_MESSAGES "
|
||||||
|
"directories."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:281
|
||||||
|
#, php-format
|
||||||
|
msgid "Lang alias symlink found: %s -> %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:291
|
||||||
|
#, php-format
|
||||||
|
msgid "JSON catalog symlink for %s -> %s created (%s)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:299
|
||||||
|
#, php-format
|
||||||
|
msgid "Fail to create JSON catalog symlink for %s -> %s (%s)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:309
|
||||||
|
#, php-format
|
||||||
|
msgid "JSON catalog symlink for %s -> %s already exist (%s)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:317
|
||||||
|
#, php-format
|
||||||
|
msgid ""
|
||||||
|
"JSON catalog file for %s already exist, but it's not a symlink to %s (%s)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:356
|
||||||
|
#, php-format
|
||||||
|
msgid "Fail to compile messages from %s PO file as MO file using msgfmt (%s)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:367
|
||||||
|
#, php-format
|
||||||
|
msgid "Fail to open %s JSON catalog file in write mode (%s)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:374
|
||||||
|
#, php-format
|
||||||
|
msgid "Fail to write %s JSON catalog in file (%s)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:381
|
||||||
|
#, php-format
|
||||||
|
msgid "%s JSON catalog writed (%s)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:396
|
||||||
|
msgid ""
|
||||||
|
"Compile messages from existing translation PO lang files to corresponding MO "
|
||||||
|
"files and JSON catalogs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:401
|
||||||
|
msgid ""
|
||||||
|
"This command could be used to compile PO files in lang/*/LC_MESSAGES "
|
||||||
|
"directories to MO files and as JSON catalogs in public_html/translations."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/mail.php:12
|
#: /home/brenard/dev/eesyphp/includes/mail.php:12
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid ""
|
msgid ""
|
||||||
|
@ -366,95 +518,55 @@ msgstr ""
|
||||||
msgid "-m/--max-age Item expiration limit (in days, optional)"
|
msgid "-m/--max-age Item expiration limit (in days, optional)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:393
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:4
|
||||||
msgid "Fail to list PHP files."
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:171
|
||||||
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:200
|
||||||
|
msgid "Confirmation"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:410
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:5
|
||||||
msgid "Fail to extract messages from PHP files using xgettext."
|
msgid "Do you confirm?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:421
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:11
|
||||||
msgid ""
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:108
|
||||||
"Fail to extract messages from template files using tsmarty2c.php script."
|
msgid "Cancel"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:431
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:17
|
||||||
msgid "Fail to merge messages using msgcat."
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:114
|
||||||
|
msgid "Validate"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:436
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:44
|
||||||
msgid "Extract messages that need to be translated"
|
msgid "Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:438
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:52
|
||||||
msgid "This command could be used to generate/update lang/messages.pot file."
|
msgid "OK"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:449
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:91
|
||||||
#, php-format
|
msgid "Question"
|
||||||
msgid "POT file not found (%s). Please run extract_messages first."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:460
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:92
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:519
|
msgid "Please enter your answer below:"
|
||||||
#, php-format
|
|
||||||
msgid "Lang directory '%s' found"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:467
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:143
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:526
|
msgid "Please wait"
|
||||||
#, php-format
|
|
||||||
msgid "LC_MESSAGES directory not found in lang '%s' directory, ignore it."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:477
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:144
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:536
|
msgid "Please wait while your request is being processed."
|
||||||
#, php-format
|
|
||||||
msgid "PO file not found in lang '%s' directory, ignore it."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:489
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:172
|
||||||
#, php-format
|
#: /home/brenard/dev/eesyphp/public_html/js/myconfirm.js:201
|
||||||
msgid "Fail to update messages in %s PO file using msgmerge (%s)."
|
msgid "Are you sure?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:499
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:560
|
|
||||||
#, php-format
|
|
||||||
msgid "Fail to open root lang directory (%s)."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:504
|
|
||||||
msgid "Update messages in existing translation PO lang files"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:506
|
|
||||||
msgid ""
|
|
||||||
"This command could be used to update PO files in lang/*/LC_MESSAGES "
|
|
||||||
"directories."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:550
|
|
||||||
#, php-format
|
|
||||||
msgid "Fail to compile messages from %s PO file as MO file using msgfmt (%s)."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:565
|
|
||||||
msgid ""
|
|
||||||
"Compile messages from existing translation PO lang files to corresponding MO "
|
|
||||||
"files"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:567
|
|
||||||
msgid ""
|
|
||||||
"This command could be used to compile PO files in lang/*/LC_MESSAGES "
|
|
||||||
"directories to MO files."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid ""
|
|
||||||
msgstr "Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/templates/form.tpl:7
|
#: /home/brenard/dev/eesyphp/templates/form.tpl:7
|
||||||
#: /home/brenard/dev/eesyphp/templates/search.tpl:36
|
#: /home/brenard/dev/eesyphp/templates/search.tpl:36
|
||||||
#: /home/brenard/dev/eesyphp/templates/show.tpl:5
|
#: /home/brenard/dev/eesyphp/templates/show.tpl:5
|
||||||
|
@ -552,8 +664,10 @@ msgid "No item found."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/templates/search.tpl:68
|
#: /home/brenard/dev/eesyphp/templates/search.tpl:68
|
||||||
msgid "Element(s) %1 to %2 on %3"
|
msgid "%3 element"
|
||||||
msgstr ""
|
msgid_plural "Elements %1 to %2 on %3"
|
||||||
|
msgstr[0] ""
|
||||||
|
msgstr[1] ""
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/templates/error_404.tpl:3
|
#: /home/brenard/dev/eesyphp/templates/error_404.tpl:3
|
||||||
msgid "The requested page can not be found."
|
msgid "The requested page can not be found."
|
||||||
|
|
|
@ -22,7 +22,7 @@ msgid "An error occurred while viewing this page."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/url-public.php:7
|
#: /home/brenard/dev/eesyphp/includes/url-public.php:7
|
||||||
#: /home/brenard/dev/eesyphp/includes/translation.php:134
|
#: /home/brenard/dev/eesyphp/includes/translation.php:140
|
||||||
msgid "Hello world !"
|
msgid "Hello world !"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -143,6 +143,151 @@ msgstr ""
|
||||||
msgid "Archived"
|
msgid "Archived"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:51
|
||||||
|
msgid "Fail to list PHP files."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:68
|
||||||
|
msgid "Fail to extract messages from PHP files using xgettext."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:78
|
||||||
|
msgid "Fail to list JS files."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:95
|
||||||
|
msgid "Fail to extract messages from JS files using xgettext."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:108
|
||||||
|
msgid ""
|
||||||
|
"Fail to extract messages from template files using tsmarty2c.php script."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:134
|
||||||
|
msgid "Fail to merge messages using msgcat."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:139
|
||||||
|
msgid "Extract messages that need to be translated"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:141
|
||||||
|
msgid "This command could be used to generate/update lang/messages.pot file."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:159
|
||||||
|
#, php-format
|
||||||
|
msgid "Compendium file %s not found."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:171
|
||||||
|
#, php-format
|
||||||
|
msgid "POT file not found (%s). Please run extract_messages first."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:186
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:325
|
||||||
|
#, php-format
|
||||||
|
msgid "Lang directory '%s' found"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:193
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:332
|
||||||
|
#, php-format
|
||||||
|
msgid "LC_MESSAGES directory not found in lang '%s' directory, ignore it."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:210
|
||||||
|
#, php-format
|
||||||
|
msgid "Fail to init messages in %s PO file using msginit (%s)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:230
|
||||||
|
#, php-format
|
||||||
|
msgid "Fail to update messages in %s PO file using msgmerge (%s)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:238
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:342
|
||||||
|
#, php-format
|
||||||
|
msgid "PO file not found in lang '%s' directory, ignore it."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:247
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:390
|
||||||
|
#, php-format
|
||||||
|
msgid "Fail to open root lang directory (%s)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:252
|
||||||
|
msgid "Update messages in translation PO lang files"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:254
|
||||||
|
msgid ""
|
||||||
|
"This command could be used to init/update PO files in lang/*/LC_MESSAGES "
|
||||||
|
"directories."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:281
|
||||||
|
#, php-format
|
||||||
|
msgid "Lang alias symlink found: %s -> %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:291
|
||||||
|
#, php-format
|
||||||
|
msgid "JSON catalog symlink for %s -> %s created (%s)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:299
|
||||||
|
#, php-format
|
||||||
|
msgid "Fail to create JSON catalog symlink for %s -> %s (%s)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:309
|
||||||
|
#, php-format
|
||||||
|
msgid "JSON catalog symlink for %s -> %s already exist (%s)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:317
|
||||||
|
#, php-format
|
||||||
|
msgid ""
|
||||||
|
"JSON catalog file for %s already exist, but it's not a symlink to %s (%s)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:356
|
||||||
|
#, php-format
|
||||||
|
msgid "Fail to compile messages from %s PO file as MO file using msgfmt (%s)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:367
|
||||||
|
#, php-format
|
||||||
|
msgid "Fail to open %s JSON catalog file in write mode (%s)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:374
|
||||||
|
#, php-format
|
||||||
|
msgid "Fail to write %s JSON catalog in file (%s)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:381
|
||||||
|
#, php-format
|
||||||
|
msgid "%s JSON catalog writed (%s)."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:396
|
||||||
|
msgid ""
|
||||||
|
"Compile messages from existing translation PO lang files to corresponding MO "
|
||||||
|
"files and JSON catalogs"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/brenard/dev/eesyphp/includes/translation-cli.php:401
|
||||||
|
msgid ""
|
||||||
|
"This command could be used to compile PO files in lang/*/LC_MESSAGES "
|
||||||
|
"directories to MO files and as JSON catalogs in public_html/translations."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/mail.php:12
|
#: /home/brenard/dev/eesyphp/includes/mail.php:12
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid ""
|
msgid ""
|
||||||
|
@ -364,89 +509,3 @@ msgstr ""
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:378
|
#: /home/brenard/dev/eesyphp/includes/cli.php:378
|
||||||
msgid "-m/--max-age Item expiration limit (in days, optional)"
|
msgid "-m/--max-age Item expiration limit (in days, optional)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:393
|
|
||||||
msgid "Fail to list PHP files."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:410
|
|
||||||
msgid "Fail to extract messages from PHP files using xgettext."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:421
|
|
||||||
msgid ""
|
|
||||||
"Fail to extract messages from template files using tsmarty2c.php script."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:431
|
|
||||||
msgid "Fail to merge messages using msgcat."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:436
|
|
||||||
msgid "Extract messages that need to be translated"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:438
|
|
||||||
msgid "This command could be used to generate/update lang/messages.pot file."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:449
|
|
||||||
#, php-format
|
|
||||||
msgid "POT file not found (%s). Please run extract_messages first."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:460
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:519
|
|
||||||
#, php-format
|
|
||||||
msgid "Lang directory '%s' found"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:467
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:526
|
|
||||||
#, php-format
|
|
||||||
msgid "LC_MESSAGES directory not found in lang '%s' directory, ignore it."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:477
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:536
|
|
||||||
#, php-format
|
|
||||||
msgid "PO file not found in lang '%s' directory, ignore it."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:489
|
|
||||||
#, php-format
|
|
||||||
msgid "Fail to update messages in %s PO file using msgmerge (%s)."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:499
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:560
|
|
||||||
#, php-format
|
|
||||||
msgid "Fail to open root lang directory (%s)."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:504
|
|
||||||
msgid "Update messages in existing translation PO lang files"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:506
|
|
||||||
msgid ""
|
|
||||||
"This command could be used to update PO files in lang/*/LC_MESSAGES "
|
|
||||||
"directories."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:550
|
|
||||||
#, php-format
|
|
||||||
msgid "Fail to compile messages from %s PO file as MO file using msgfmt (%s)."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:565
|
|
||||||
msgid ""
|
|
||||||
"Compile messages from existing translation PO lang files to corresponding MO "
|
|
||||||
"files"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/includes/cli.php:567
|
|
||||||
msgid ""
|
|
||||||
"This command could be used to compile PO files in lang/*/LC_MESSAGES "
|
|
||||||
"directories to MO files."
|
|
||||||
msgstr ""
|
|
||||||
|
|
|
@ -102,8 +102,10 @@ msgid "No item found."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/templates/search.tpl:68
|
#: /home/brenard/dev/eesyphp/templates/search.tpl:68
|
||||||
msgid "Element(s) %1 to %2 on %3"
|
msgid "%3 element"
|
||||||
msgstr ""
|
msgid_plural "Elements %1 to %2 on %3"
|
||||||
|
msgstr[0] ""
|
||||||
|
msgstr[1] ""
|
||||||
|
|
||||||
#: /home/brenard/dev/eesyphp/templates/error_404.tpl:3
|
#: /home/brenard/dev/eesyphp/templates/error_404.tpl:3
|
||||||
msgid "The requested page can not be found."
|
msgid "The requested page can not be found."
|
||||||
|
|
26
public_html/js/translation.js
Normal file
26
public_html/js/translation.js
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
/*
|
||||||
|
* I18n
|
||||||
|
*/
|
||||||
|
var lang = null;
|
||||||
|
var translations;
|
||||||
|
|
||||||
|
function _(string) {
|
||||||
|
var translated = translations.gettext(string);
|
||||||
|
return (translated !== '') ? translated : string;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function ngettext(singular, plural, n) {
|
||||||
|
return translations.ngettext(singular, plural, n);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$(document).ready( function() {
|
||||||
|
// Load Gettext translations
|
||||||
|
var catalog = {};
|
||||||
|
$.getJSON('translations/'+lang+'.json', function(data) {
|
||||||
|
catalog = data;
|
||||||
|
}).always(function() {
|
||||||
|
translations = babel.Translations.load(catalog).install();
|
||||||
|
});
|
||||||
|
});
|
160
public_html/lib/babel.js
Normal file
160
public_html/lib/babel.js
Normal file
|
@ -0,0 +1,160 @@
|
||||||
|
/**
|
||||||
|
* Babel JavaScript Support
|
||||||
|
*
|
||||||
|
* Copyright (C) 2008-2011 Edgewall Software
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed as described in the file COPYING, which
|
||||||
|
* you should have received as part of this distribution. The terms
|
||||||
|
* are also available at http://babel.edgewall.org/wiki/License.
|
||||||
|
*
|
||||||
|
* This software consists of voluntary contributions made by many
|
||||||
|
* individuals. For the exact contribution history, see the revision
|
||||||
|
* history and logs, available at http://babel.edgewall.org/log/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A simple module that provides a gettext like translation interface.
|
||||||
|
* The catalog passed to load() must be a object conforming to this
|
||||||
|
* interface::
|
||||||
|
*
|
||||||
|
* {
|
||||||
|
* messages: an object of {msgid: translations} items where
|
||||||
|
* translations is an array of messages or a single
|
||||||
|
* string if the message is not pluralizable.
|
||||||
|
* plural_expr: the plural expression for the language.
|
||||||
|
* locale: the identifier for this locale.
|
||||||
|
* domain: the name of the domain.
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* Missing elements in the object are ignored.
|
||||||
|
*
|
||||||
|
* Typical usage::
|
||||||
|
*
|
||||||
|
* var translations = babel.Translations.load(...).install();
|
||||||
|
*/
|
||||||
|
var babel = new function() {
|
||||||
|
|
||||||
|
var defaultPluralExpr = function(n) { return n == 1 ? 0 : 1; };
|
||||||
|
var formatRegex = /%?%(?:\(([^\)]+)\))?([disr])/g;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A translations object implementing the gettext interface
|
||||||
|
*/
|
||||||
|
var Translations = this.Translations = function(locale, domain) {
|
||||||
|
this.messages = {};
|
||||||
|
this.locale = locale || 'unknown';
|
||||||
|
this.domain = domain || 'messages';
|
||||||
|
this.pluralexpr = defaultPluralExpr;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new translations object from the catalog and return it.
|
||||||
|
* See the babel-module comment for more details.
|
||||||
|
*/
|
||||||
|
Translations.load = function(catalog) {
|
||||||
|
var rv = new Translations();
|
||||||
|
rv.load(catalog);
|
||||||
|
return rv;
|
||||||
|
};
|
||||||
|
|
||||||
|
Translations.prototype = {
|
||||||
|
/**
|
||||||
|
* translate a single string.
|
||||||
|
*/
|
||||||
|
gettext: function(string) {
|
||||||
|
var translated = this.messages[string];
|
||||||
|
if (typeof translated == 'undefined')
|
||||||
|
return string;
|
||||||
|
return (typeof translated == 'string') ? translated : translated[0];
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* translate a pluralizable string
|
||||||
|
*/
|
||||||
|
ngettext: function(singular, plural, n) {
|
||||||
|
var translated = this.messages[singular];
|
||||||
|
if (typeof translated == 'undefined')
|
||||||
|
return (n == 1) ? singular : plural;
|
||||||
|
return translated[this.pluralexpr(n)];
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Install this translation document wide. After this call, there are
|
||||||
|
* three new methods on the window object: _, gettext and ngettext
|
||||||
|
*/
|
||||||
|
install: function() {
|
||||||
|
var self = this;
|
||||||
|
window.gettext = function(string) {
|
||||||
|
return self.gettext(string);
|
||||||
|
};
|
||||||
|
window.ngettext = function(singular, plural, n) {
|
||||||
|
return self.ngettext(singular, plural, n);
|
||||||
|
};
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Works like Translations.load but updates the instance rather
|
||||||
|
* then creating a new one.
|
||||||
|
*/
|
||||||
|
load: function(catalog) {
|
||||||
|
if (catalog.messages)
|
||||||
|
this.update(catalog.messages);
|
||||||
|
if (catalog.plural_expr)
|
||||||
|
this.setPluralExpr(catalog.plural_expr);
|
||||||
|
if (catalog.locale)
|
||||||
|
this.locale = catalog.locale;
|
||||||
|
if (catalog.domain)
|
||||||
|
this.domain = catalog.domain;
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the translations with the object of messages.
|
||||||
|
*/
|
||||||
|
update: function(mapping) {
|
||||||
|
for (var key in mapping)
|
||||||
|
if (mapping.hasOwnProperty(key))
|
||||||
|
this.messages[key] = mapping[key];
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the plural expression
|
||||||
|
*/
|
||||||
|
setPluralExpr: function(expr) {
|
||||||
|
this.pluralexpr = new Function('n', 'return +(' + expr + ')');
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A python inspired string formatting function. Supports named and
|
||||||
|
* positional placeholders and "s", "d" and "i" as type characters
|
||||||
|
* without any formatting specifications.
|
||||||
|
*
|
||||||
|
* Examples::
|
||||||
|
*
|
||||||
|
* babel.format(_('Hello %s'), name)
|
||||||
|
* babel.format(_('Progress: %(percent)s%%'), {percent: 100})
|
||||||
|
*/
|
||||||
|
this.format = function() {
|
||||||
|
var arg, string = arguments[0], idx = 0;
|
||||||
|
if (arguments.length == 1)
|
||||||
|
return string;
|
||||||
|
else if (arguments.length == 2 && typeof arguments[1] == 'object')
|
||||||
|
arg = arguments[1];
|
||||||
|
else {
|
||||||
|
arg = [];
|
||||||
|
for (var i = 1, n = arguments.length; i != n; ++i)
|
||||||
|
arg[i - 1] = arguments[i];
|
||||||
|
}
|
||||||
|
return string.replace(formatRegex, function(all, name, type) {
|
||||||
|
if (all[0] == all[1]) return all.substring(1);
|
||||||
|
var value = arg[name || idx++];
|
||||||
|
return (type == 'i' || type == 'd') ? +value : value;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
1
public_html/translations/fr.json
Symbolic link
1
public_html/translations/fr.json
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
fr_FR.UTF8.json
|
1
public_html/translations/fr_FR.UTF-8.json
Symbolic link
1
public_html/translations/fr_FR.UTF-8.json
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
fr_FR.UTF8.json
|
1
public_html/translations/fr_FR.UTF8.json
Normal file
1
public_html/translations/fr_FR.UTF8.json
Normal file
File diff suppressed because one or more lines are too long
1
public_html/translations/fr_FR.json
Symbolic link
1
public_html/translations/fr_FR.json
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
fr_FR.UTF8.json
|
1
public_html/translations/fr_FR.utf-8.json
Symbolic link
1
public_html/translations/fr_FR.utf-8.json
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
fr_FR.UTF8.json
|
1
public_html/translations/fr_FR.utf8.json
Symbolic link
1
public_html/translations/fr_FR.utf8.json
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
fr_FR.UTF8.json
|
|
@ -97,5 +97,12 @@
|
||||||
<script language="javascript" src="{$file}"></script>
|
<script language="javascript" src="{$file}"></script>
|
||||||
{/foreach}
|
{/foreach}
|
||||||
|
|
||||||
|
<!-- Global variables -->
|
||||||
|
<script>
|
||||||
|
var lang = "{$lang}";
|
||||||
|
var locale = "{$locale}";
|
||||||
|
var text_domain = "{$text_domain}";
|
||||||
|
</script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -65,7 +65,7 @@
|
||||||
<div class="row">
|
<div class="row">
|
||||||
{if $result.count>1}
|
{if $result.count>1}
|
||||||
<div class="col-lg-3">
|
<div class="col-lg-3">
|
||||||
<div role="status">{t 1=$result.first 2=$result.last 3=$result.count}Element(s) %1 to %2 on %3{/t}</div>
|
<div role="status">{t count=$result.count 1=$result.first 2=$result.last 3=$result.count plural="Elements %1 to %2 on %3"}%3 element{/t}</div>
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
{if $result.nb_pages > 1}
|
{if $result.nb_pages > 1}
|
||||||
|
|
Loading…
Reference in a new issue