Change code to be more robust

The code doesn't rely on positionnal arguments anymore. It uses options.
I've added some check to validate that the action performed are configured
properly.
pull/1829/head
Alexis Degrugillier 7 years ago
parent 23342aec30
commit 948b44ee1e
  1. 102
      cli/manipulate.translation.php

@ -1,13 +1,13 @@
<?php
$options = getopt("h");
$options = getopt("a:hk:l:v:");
if (array_key_exists('h', $options)) {
help();
}
if (1 === $argc || 5 < $argc) {
help();
if (!array_key_exists('a', $options)) {
error('You need to specify the action to perform.');
}
require_once __DIR__ . '/i18n/I18nFile.php';
@ -15,27 +15,31 @@ require_once __DIR__ . '/i18n/I18nFile.php';
$i18nFile = new I18nFile();
$i18nData = $i18nFile->load();
switch ($argv[1]) {
case 'add_language' :
$i18nData->addLanguage($argv[2]);
break;
case 'add_key' :
if (3 === $argc) {
help();
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.');
}
$i18nData->addKey($argv[2], $argv[3]);
break;
case 'add_value':
if (4 === $argc) {
help();
case 'delete' :
if (array_key_exists('k', $options)) {
$i18nData->removeKey($options['k']);
} else {
error('You need to specify the key to delete.');
}
$i18nData->addValue($argv[2], $argv[3], $argv[4]);
break;
case 'duplicate_key' :
$i18nData->duplicateKey($argv[2]);
break;
case 'delete_key' :
$i18nData->removeKey($argv[2]);
case 'duplicate' :
if (array_key_exists('k', $options)) {
$i18nData->duplicateKey($options['k']);
} else {
error('You need to specify the key to duplicate');
}
break;
case 'format' :
$i18nFile->dump($i18nData);
@ -48,47 +52,61 @@ if ($i18nData->hasChanged()) {
$i18nFile->dump($i18nData);
}
/**
* 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
%s
%1\$s
SYNOPSIS
php %s [OPTION] [OPERATION] [KEY] [VALUE] [LANGUAGE]
php %1\$s [OPTIONS]
DESCRIPTION
Manipulate translation files. Available operations are
Check if translation files have missing keys or missing translations.
Manipulate translation files.
-a=ACTION
select the action to perform. Available actions are add, delete,
duplicate, and format. 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.
OPERATION
add_language
add a new language by duplicating the referential. This operation
needs only a KEY.
EXEMPLE
Exemple 1: add a language. It adds a new language by duplicating the referential.
php %1\$s -a add -l my_lang
add_key add a new key in the referential. This operation needs a KEY and
a VALUE.
Exemple 2: add a new key. It adds the key in the referential.
php %1\$s -a add -k my_key -v my_value
add_value
add a value in the referential. This operation needs a KEY, a
VALUE, and a LANGUAGE.
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
duplicate_key
duplicate a referential key in other languages. This operation
needs only a KEY.
Exemple 4: delete a key. It deletes the selected key in every languages.
php %1\$s -a delete -k my_key
delete_key
delete a referential key from all languages. This operation needs
only a KEY.
Exemple 5: duplicate a key. It duplicates the key from the referential in every languages.
php %1\$s -a duplicate -k my_key
format format i18n files.
Exemple 6: format i18n files.
php %1\$s -a format
HELP;
$file = str_replace(__DIR__ . '/', '', __FILE__);
echo sprintf($help, $file, $file);
echo sprintf($help, $file);
exit;
}

Loading…
Cancel
Save