diff --git a/Command/GoogleTranslateCommand.php b/Command/GoogleTranslateCommand.php
index 440ecbf..45304be 100644
--- a/Command/GoogleTranslateCommand.php
+++ b/Command/GoogleTranslateCommand.php
@@ -19,67 +19,105 @@ protected function configure()
->setDefinition(array(
new InputArgument('localeFrom', InputArgument::REQUIRED, 'The locale'),
new InputArgument('localeTo', InputArgument::REQUIRED, 'The locale'),
- new InputArgument('bundle', InputArgument::REQUIRED, 'The bundle where to load the messages'),
+ new InputArgument('bundles', InputArgument::OPTIONAL, 'Import translations for this specific bundles (comma separated).'),
))
->addOption('override', null, InputOption::VALUE_NONE, 'If set and file with locateTo exist - it will be replaced with new translated file')
+ ->addOption('domains', 'd', InputOption::VALUE_OPTIONAL, 'Only imports files for given domains (comma separated).')
->setDescription('translate message files in your project with Google Translate');
}
protected function execute(InputInterface $input, OutputInterface $output)
{
- $foundBundle = $this->getApplication()->getKernel()->getBundle($input->getArgument('bundle'));
- $basePath = $foundBundle->getPath() . '/Resources/translations';
- if (!is_dir($basePath)) {
- throw new \Exception('Bundle has no translation message!');
+ $bundles = $input->getArgument('bundles') ? explode(',', $input->getArgument('bundles')) : array();
+ $domains = $input->getOption('domains') ? explode(',', $input->getOption('domains')) : array();
+
+ $foundBundles = array();
+ if ($bundles) {
+ foreach ($bundles as $bundle) {
+ array_push($foundBundles,$this->getApplication()->getKernel()->getBundle($bundle)->getPath());
+ }
+ } else {
+ $bundles = $this->getApplication()->getKernel()->getBundles();
+ foreach ($bundles as $bundle)
+ {
+ array_push($foundBundles, $bundle->getPath());
+ }
+ array_push($foundBundles, $this->getApplication()->getKernel()->getRootDir());
}
- if ($handle = opendir($basePath)) {
+ //ToDo make handler for other formats (xml, php)
+
+ $messagesFromFileName = array();
+
+ foreach ($foundBundles as $foundBundle)
+ {
+ if (is_dir($basePath = $foundBundle.'/Resources/translations')) {
+ $output->writeln('Bundle: '.$basePath);
+ if ($domains) {
+ foreach ($domains as $domain) {
+ $handle = opendir($basePath) ;
+ while (false !== ($messageFromFileName = readdir($handle))) {
+ if ($messageFromFileName == $domain.'.'.$input->getArgument('localeFrom').'.yml') {
+ array_push($messagesFromFileName, $basePath.'/'.$messageFromFileName);
+ }
+ }
+ }
+ } else {
+ $handle = opendir($basePath) ;
+ while (false !== ($messageFromFileName = readdir($handle))) {
+ if (false !== strpos($messageFromFileName, $input->getArgument('localeFrom').'.yml')) {
+ array_push($messagesFromFileName, $basePath.'/'.$messageFromFileName);
+ }
+ }
+ }
+ }
+ }
+ $output->writeln('');
- while (false !== ($messageFromFileName = readdir($handle))) {
- //ToDo make handler for other formats (xml, php)
- if (false !== strpos($messageFromFileName, $input->getArgument('localeFrom').'.yml')) {
+ foreach ($messagesFromFileName as $messageFromFileName) {
- $messageToFileName = preg_replace("/(.*\.)" .$input->getArgument('localeFrom'). "(\..*)/i", "$1" . $input->getArgument('localeTo') . "$2", $messageFromFileName);
+ $output->writeln('Parse ' . $messageFromFileName . ' file');
+ $messageToFileName = preg_replace("/(.*\.)" .$input->getArgument('localeFrom'). "(\..*)/i", "$1" . $input->getArgument('localeTo') . "$2", $messageFromFileName);
- $messagesFrom = Yaml::parse(sprintf("%s/$messageFromFileName", $basePath));
- $messagesTo = Yaml::parse(sprintf("%s/$messageToFileName", $basePath));
+ $messagesFrom = Yaml::parse($messageFromFileName);
+ $messagesTo = Yaml::parse($messageToFileName);
- //If override - translate all message again, even if it had been translated
- if ($input->getOption('override')) {
- $arrayDiff = $messagesFrom;
- } else {
- $arrayDiff = $this->arrayDiffKeyRecursive($messagesFrom, $messagesTo);
- }
+ //If override - translate all message again, even if it had been translated
+ if ($input->getOption('override')) {
+ $arrayDiff = $messagesFrom;
+ } else {
+ $arrayDiff = $this->arrayDiffKeyRecursive($messagesFrom, $messagesTo);
+ }
- //If nothing to translate - exit
- if (!$count = count($arrayDiff, COUNT_RECURSIVE)) {
- $output->writeln('Nothing to translate!');
- continue;
- }
+ //If nothing to translate - exit
+ if (!$count = count($arrayDiff, COUNT_RECURSIVE)) {
+ $output->writeln(' > Nothing to translate!');
+ continue;
+ }
- $this->progress = $this->getHelperSet()->get('progress');
- $this->progress->start($output, $count);
+ $this->progress = $this->getHelperSet()->get('progress');
+ $this->progress->start($output, $count);
- $translatedArray = $this->translateArray($arrayDiff, $input->getArgument('localeFrom'), $input->getArgument('localeTo'));
+ $translatedArray = $this->translateArray($arrayDiff, $input->getArgument('localeFrom'), $input->getArgument('localeTo'));
- if ($input->getOption('override') || !is_array($messagesTo)) {
- $messagesTo = $translatedArray;
- } else {
- $messagesTo = array_merge_recursive($translatedArray, $messagesTo);
- }
+ if ($input->getOption('override') || !is_array($messagesTo)) {
+ $messagesTo = $translatedArray;
+ } else {
+ $messagesTo = array_merge_recursive($translatedArray, $messagesTo);
+ }
- $this->progress->finish();
+ $this->progress->finish();
- $output->writeln(sprintf('Creating "%s" file', $messageToFileName));
+ $output->writeln(sprintf(' > Creating "%s" file', $messageToFileName));
+
+ $file = dirname($messageFromFileName) . '/' . basename($messageToFileName);
+ $messagesTo = $this->ksortRecursive($messagesTo);
+ file_put_contents($file, Yaml::dump($messagesTo, 100500));
- $file = $basePath . '/' . $messageToFileName;
- $messagesTo = $this->ksortRecursive($messagesTo);
- file_put_contents($file, Yaml::dump($messagesTo, 100500));
- }
- }
}
+ $output->writeln('');
$output->writeln('Translate is success!');
}
diff --git a/README.md b/README.md
index 3c5667a..ad3bdbc 100644
--- a/README.md
+++ b/README.md
@@ -62,10 +62,28 @@ public function indexAction() {
return new Response($translatedString);
}
```
-or you can use console command to translate messages
+Or you can use console command to translate messages
```bash
-app/console gtranslate:translate en fr AcmeDemoBundle
+app/console gtranslate:translate [--override] [-d|--domains[="..."]] localeFrom localeTo [bundles]
+```
+
+Command arguments:
+* `localeFrom`: Locale from
+* `localeTo`: Locale to
+* `bundles`: Import translation for this specific bundles (comma separted) [optional]
+
+Command options:
+* `--override`: Override existing translation [optional]
+* `--domains` (or -d): Only imports files for given domains (comma separated) [optional]
+
+
+Example:
+
+```bash
+$ app/console gtranslate:translate en fr AcmeFooBundle
+$ app/console gtranslate:translate en it --domains=messages,foo,bar
+$ app/console gtranslate:translate en es AcmeFooBundle,AcmeBarBundle --domains=messages,foo,bar
```
Bug tracking