aboutsummaryrefslogtreecommitdiff
path: root/cli
diff options
context:
space:
mode:
authorJan-Hendrik Willms <tleilax+studip@gmail.com>2024-07-02 10:28:06 +0000
committerJan-Hendrik Willms <tleilax+github@gmail.com>2024-07-02 13:03:12 +0200
commit88fe7e0e3cad41219dabc7f2e0992fcda7b89ad2 (patch)
tree4c3812c7a7697e24cb38ab38773c1443bd28e665 /cli
parent17991a875240057ddd878767b69b516f6a1b681e (diff)
update .po files as well when cli command plugin:i18n:extract is executed, fixes #4360
Closes #4360 Merge request studip/studip!3159
Diffstat (limited to 'cli')
-rw-r--r--cli/Commands/Plugins/I18N/I18NExtract.php59
1 files changed, 46 insertions, 13 deletions
diff --git a/cli/Commands/Plugins/I18N/I18NExtract.php b/cli/Commands/Plugins/I18N/I18NExtract.php
index e1f479f..cc037db 100644
--- a/cli/Commands/Plugins/I18N/I18NExtract.php
+++ b/cli/Commands/Plugins/I18N/I18NExtract.php
@@ -23,10 +23,11 @@ final class I18NExtract extends I18NCommand
protected function execute(InputInterface $input, OutputInterface $output): int
{
try {
- $folder = $this->getPluginFolder($input);
+ $folder = $this->getPluginFolder($input);
$manifest = $this->getPluginManifest($folder);
$localedomain = $this->getPluginLocaleDomainByFolder($folder);
+ // Create locale directories if they don't exist
foreach ($this->getSystemLanguages() as $lang) {
$lang = explode('_', $lang)[0];
$language_dir = "{$folder}/locale/{$lang}/LC_MESSAGES";
@@ -35,6 +36,7 @@ final class I18NExtract extends I18NCommand
}
}
+ // Extract translations into pot file
$main_lang = $this->getSystemLanguages()[0];
$pot_file = "{$folder}/locale/{$main_lang}/LC_MESSAGES/{$localedomain}.pot";
file_put_contents($pot_file, '');
@@ -46,26 +48,57 @@ final class I18NExtract extends I18NCommand
$process = Process::fromShellCommandline($command_line);
- try {
- $process->mustRun(null, [
- 'FOLDER' => $folder,
- 'PACKAGENAME' => $manifest['pluginclassname'],
- 'POTFILE' => $pot_file,
+ $process->mustRun(null, [
+ 'FOLDER' => $folder,
+ 'PACKAGENAME' => $manifest['pluginclassname'],
+ 'POTFILE' => $pot_file,
+ ]);
+
+ $out = $process->getOutput();
+ if ($out) {
+ $output->writeln($out, OutputInterface::VERBOSITY_VERBOSE);
+ }
+
+ // Merge pot into exisiting po files
+ foreach ($this->getSystemLanguages() as $lang) {
+ if ($lang === $main_lang) {
+ continue;
+ }
+
+ $lang = explode('_', $lang)[0];
+ $po_file = "{$folder}/locale/{$lang}/LC_MESSAGES/{$localedomain}.po";
+
+ if (!file_exists($po_file)) {
+ continue;
+ }
+
+ $command_line = 'msgmerge --backup=off --update "${:POFILE}" "${:POTFILE}"';
+ $process = Process::fromShellCommandline($command_line);
+ $process->run(null, [
+ 'POFILE' => $po_file,
+ 'POTFILE' => $pot_file,
]);
+ if (!$process->isSuccessful()) {
+ $output->writeln(
+ "<error>Update of po file failed: {$out}</error>",
+ OutputInterface::VERBOSITY_VERBOSE
+ );
+ continue;
+ }
+
$out = $process->getOutput();
if ($out) {
$output->writeln($out, OutputInterface::VERBOSITY_VERBOSE);
}
-
- $output->writeln("Translation strings have been extracted successfully.");
- return Command::SUCCESS;
- } catch (ProcessFailedException $e) {
- $output->writeln("<error>Could not execute shell command</error>");
- $output->writeln($e->getmessage());
- return Command::FAILURE;
}
+ $output->writeln("Translation strings have been extracted successfully.");
+ return Command::SUCCESS;
+ } catch (ProcessFailedException $e) {
+ $output->writeln("<error>Could not execute shell command</error>");
+ $output->writeln($e->getmessage());
+ return Command::FAILURE;
} catch (Exception $e) {
$output->writeln("<error>{$e->getMessage()}</error>");
return Command::FAILURE;