Implement `TI18nDatabaseObjectAction::getLanguageItem()` to generate dynamic language...
authorCyperghost <olaf_schmitz_1@t-online.de>
Wed, 20 Nov 2024 10:47:05 +0000 (11:47 +0100)
committerCyperghost <olaf_schmitz_1@t-online.de>
Wed, 20 Nov 2024 10:47:05 +0000 (11:47 +0100)
wcfsetup/install/files/lib/data/TI18nDatabaseObjectAction.class.php
wcfsetup/install/files/lib/data/menu/MenuAction.class.php

index 68fa37ed79697cb9a3dfb4fa20639969d91fbb79..b2d59d133c9032ac485cc15e8603cdb613816375 100644 (file)
@@ -28,7 +28,7 @@ trait TI18nDatabaseObjectAction
         $langaugeItems = [];
         foreach ($this->getObjects() as $object) {
             foreach ($this->getI18nSaveTypes() as $name => $regex) {
-                if ($object->$name === \str_replace('\d+', $object->getObjectID(), $regex)) {
+                if ($object->$name === $this->getLanguageItem($object, $regex)) {
                     $langaugeItems[] = $object->$name;
                 }
             }
@@ -100,7 +100,7 @@ trait TI18nDatabaseObjectAction
         $updateData = $deleteData = [];
 
         foreach ($this->getI18nSaveTypes() as $name => $regex) {
-            $languageName = \str_replace('\d+', $object->getObjectID(), $regex);
+            $languageName = $this->getLanguageItem($object, $regex);
             if (isset($this->parameters[$name . '_i18n'])) {
                 I18nHandler::getInstance()->save(
                     $this->parameters[$name . '_i18n'],
@@ -121,4 +121,12 @@ trait TI18nDatabaseObjectAction
             $editor->update($updateData);
         }
     }
+
+    /**
+     * Formats the language item.
+     */
+    protected function getLanguageItem(DatabaseObject $object, string $regex): string
+    {
+        return \str_replace('\d+', $object->getObjectID(), $regex);
+    }
 }
index fc426a5117a14737615f18163f376019ce0c38e3..a0c73611b570547c6683951ae72fabe9c6648f22 100644 (file)
@@ -5,6 +5,7 @@ namespace wcf\data\menu;
 use wcf\data\AbstractDatabaseObjectAction;
 use wcf\data\box\BoxAction;
 use wcf\data\box\BoxEditor;
+use wcf\data\DatabaseObject;
 use wcf\data\TI18nDatabaseObjectAction;
 use wcf\system\exception\PermissionDeniedException;
 
@@ -111,7 +112,7 @@ class MenuAction extends AbstractDatabaseObjectAction
     public function getI18nSaveTypes(): array
     {
         return [
-            'title' => 'wcf.menu.com.woltlab.wcf.genericMenu\d+'
+            'title' => 'wcf.menu.\w+'
         ];
     }
 
@@ -126,4 +127,15 @@ class MenuAction extends AbstractDatabaseObjectAction
     {
         return PACKAGE_ID;
     }
+
+    protected function getLanguageItem(DatabaseObject $object, string $regex): string
+    {
+        \assert($object instanceof Menu);
+
+        return \str_replace(
+            '\w+',
+            $object->identifier ?: 'com.woltlab.wcf.genericMenu' . $object->menuID,
+            $regex
+        );
+    }
 }