aboutsummaryrefslogtreecommitdiff
path: root/cli/i18n/I18nData.php
diff options
context:
space:
mode:
authorGravatar Inverle <inverle@proton.me> 2025-11-16 18:44:07 +0100
committerGravatar GitHub <noreply@github.com> 2025-11-16 18:44:07 +0100
commitb9abe706902c666d85cf60eb828a72c4f3062297 (patch)
tree887eae20f83b8e39bb515933615b4a39428b965e /cli/i18n/I18nData.php
parentcf4d8043d2076ba346e9890a41984d458e94c8dc (diff)
Add new translate action: `move`, `make i18n-move-key` (#8214)
So that renaming something like `conf.shortcut.toggle_sidebar` to `conf.shortcut.toggle_aside` can be done easily even after already having added `conf.shortcut.toggle_sidebar` and translated it in multiple languages. Example of usage: ```console ./cli/manipulate.translation.php -a move -k conf.shortcut.toggle_sidebar -n conf.shortcut.toggle_aside ``` ```console make i18n-move-key key="conf.shortcut.toggle_sidebar" new-key="conf.shortcut.toggle_aside" ``` The key will be moved and all values/states will be kept.
Diffstat (limited to 'cli/i18n/I18nData.php')
-rw-r--r--cli/i18n/I18nData.php27
1 files changed, 25 insertions, 2 deletions
diff --git a/cli/i18n/I18nData.php b/cli/i18n/I18nData.php
index 981c19e62..7d2e39a95 100644
--- a/cli/i18n/I18nData.php
+++ b/cli/i18n/I18nData.php
@@ -98,7 +98,7 @@ class I18nData {
*/
public function addLanguage(string $language, ?string $reference = null): void {
if (array_key_exists($language, $this->data)) {
- throw new Exception('The selected language already exist.');
+ throw new Exception('The selected language already exists.');
}
if (!is_string($reference) || !array_key_exists($reference, $this->data)) {
$reference = static::REFERENCE_LANGUAGE;
@@ -221,7 +221,7 @@ class I18nData {
}
if ($this->isKnown($key)) {
- throw new Exception('The selected key already exist.');
+ throw new Exception('The selected key already exists.');
}
$parentKey = $this->getParentKey($key);
@@ -249,6 +249,29 @@ class I18nData {
}
/**
+ * Move an existing key into a new location
+ * @throws Exception
+ */
+ public function moveKey(string $key, string $newKey): void {
+ if (!$this->isKnown($key) && !$this->isKnown($this->getEmptySibling($key))) {
+ throw new Exception('The selected key does not exist');
+ }
+ if ($this->isKnown($newKey)) {
+ throw new Exception('Cannot move key to a location that already exists.');
+ }
+
+ $keyPrefix = $this->isParent($key) ? $key . '.' : $key;
+ foreach ($this->getAvailableLanguages() as $language) {
+ foreach ($this->data[$language][$this->getFilenamePrefix($key)] as $k => $v) {
+ if (str_starts_with($k, $keyPrefix)) {
+ $this->data[$language][$this->getFilenamePrefix($newKey)][str_replace($key, $newKey, $k)] = $v;
+ unset($this->data[$language][$this->getFilenamePrefix($key)][$k]);
+ }
+ }
+ }
+ }
+
+ /**
* Add a value for a key for the selected language.
*
* @throws Exception