Files
FreshRSS/cli/manipulate.translation.php
Alexis Degrugillier 3e49b44839 Update i18n cli tools (#2673)
* Update i18n cli tools

Few things were bugging me when using the cli tool for i18n. So I've modified
the tools to be easier to use.

First, the tool automatically adds missing keys to all languages. This way, we
always have all keys in all languages.
Second, the tool detects all untranslated keys and adds automatically the todo
comment after the value.
Third, when adding a new key, the key is pushed to all languages at once. There
is no need to duplicate it manually. Thus making the duplication process obsolete.
Fourth, translation and ignore keys are manipulated at the same time. Thus we
don't have obsolete ignored strings anymore.

* Add i18n rules

I find that having the common rules in the Makefile is easier to use,
as long as you know they are here. As it is self documented, people
will see the new rules when using make.

* Use long parameters in Makefile

I find that using long parameters in scripts makes it easier to understand
what's going on. So I've switched all short parameters to long one.

* Format all i18n files

I've used the updated version of the cli tools to have some output
that can be consistently formated. This commit is a huge formating
commit. Nothing was added but some comments were removed in the
process.
2019-12-04 08:27:39 +01:00

120 lines
3.0 KiB
PHP

<?php
require_once __DIR__ . '/i18n/I18nData.php';
require_once __DIR__ . '/i18n/I18nFile.php';
require_once __DIR__ . '/i18n/I18nIgnoreFile.php';
$options = getopt("a:hk:l:rv:");
if (array_key_exists('h', $options)) {
help();
}
if (!array_key_exists('a', $options)) {
error('You need to specify the action to perform.');
}
$data = new I18nFile();
$ignore = new I18nIgnoreFile();
$i18nData = new I18nData($data->load(), $ignore->load());
switch ($options['a']) {
case 'add' :
if (array_key_exists('k', $options) && array_key_exists('v', $options) && array_key_exists('l', $options)) {
$i18nData->addValue($options['k'], $options['v'], $options['l']);
} elseif (array_key_exists('k', $options) && array_key_exists('v', $options)) {
$i18nData->addKey($options['k'], $options['v']);
} elseif (array_key_exists('l', $options)) {
$i18nData->addLanguage($options['l']);
} else {
error('You need to specify a valid set of options.');
exit;
}
break;
case 'delete' :
if (array_key_exists('k', $options)) {
$i18nData->removeKey($options['k']);
} else {
error('You need to specify the key to delete.');
exit;
}
break;
case 'format' :
break;
case 'ignore' :
if (array_key_exists('l', $options) && array_key_exists('k', $options)) {
$i18nData->ignore($options['k'], $options['l'], array_key_exists('r', $options));
} else {
error('You need to specify a valid set of options.');
exit;
}
break;
default :
help();
exit;
}
$data->dump($i18nData->getData());
$ignore->dump($i18nData->getIgnore());
/**
* Output error message.
*/
function error($message) {
$error = <<<ERROR
WARNING
%s\n\n
ERROR;
echo sprintf($error, $message);
help();
}
/**
* Output help message.
*/
function help() {
$help = <<<HELP
NAME
%1\$s
SYNOPSIS
php %1\$s [OPTIONS]
DESCRIPTION
Manipulate translation files.
-a=ACTION
select the action to perform. Available actions are add, delete,
format, and ignore. This option is mandatory.
-k=KEY select the key to work on.
-v=VAL select the value to set.
-l=LANG select the language to work on.
-h display this help and exit.
EXEMPLE
Exemple 1: add a language. It adds a new language by duplicating the referential.
php %1\$s -a add -l my_lang
Exemple 2: add a new key. It adds the key for all supported languages.
php %1\$s -a add -k my_key -v my_value
Exemple 3: add a new value. It adds a new value for the selected key in the selected language.
php %1\$s -a add -k my_key -v my_value -l my_lang
Exemple 4: delete a key. It deletes the selected key from all supported languages.
php %1\$s -a delete -k my_key
Exemple 5: format i18n files.
php %1\$s -a format
Exemple 6: ignore a key. It adds the key in the ignore file to mark it as translated.
php %1\$s -a ignore -k my_key -l my_lang
Exemple 7: revert ignore a key. It removes the key from the ignore file.
php %1\$s -a ignore -r -k my_key -l my_lang\n\n
HELP;
$file = str_replace(__DIR__ . '/', '', __FILE__);
echo sprintf($help, $file);
exit;
}