Lokalisierung / Textdomäne ist langsam und chaotisch

Mein Thema hat viele Vorlagen. Die meisten von ihnen enthalten Nachrichten in der üblichen Weise:

echo __('This is the message','mytextdomain') 

Dies hat mehrere Nachteile. Zum Beispiel, wenn ich die Read More Nachricht ändern möchte, muss ich alle Dateien durchsuchen, um zu sehen, ob es da ist. Es besteht ein größeres Risiko von Tipperrorsn und es ist schwieriger, die Konsistenz der Nachrichten zu überprüfen. Gibt es also eine Möglichkeit, Nachrichten an einem Ort zu konzentrieren?

Ich frage mich auch über die performance. Für jede Seitenladung lädt WP die komplette Textdomain, nur um eine immer gleiche Übersetzung zu finden. Vor allem am Frontend klingt das nicht effizient. Gibt es also eine Möglichkeit, eine korrekte Lokalisierung zu haben, ohne den process ständig zu wiederholen?

Solutions Collecting From Web of "Lokalisierung / Textdomäne ist langsam und chaotisch"

Meiner Meinung nach konzentrieren Sie sich in diesem Fall auf ein falsches Thema.

Zum Beispiel, wenn ich die Read More Nachricht ändern möchte, muss ich alle Dateien durchsuchen, um zu sehen, ob es da ist.

Dies deutet nicht auf Lokalisierungsprobleme hin. Dies weist auf ein Problem mit dem Templaten hin .

Was, wenn Sie das Markup von Read More von was auch immer ändern möchten? Müssen Sie dies auch an mehreren Stellen tun? Dann geht es mehr darum, wie Templates strukturiert und dupliziert werden.

Nicht dass WordPress hier besonders gut ist , aber trotzdem eine Überlegung wert ist.

Ich frage mich auch über die performance. Für jede Seitenladung lädt WP die komplette Textdomain, nur um eine immer gleiche Übersetzung zu finden. Vor allem am Frontend klingt das nicht effizient.

Sie machen einen typischen Fehler, sich zu wundern, anstatt zu messen .

Es gibt sicherlich Auswirkungen auf die Performance der Lokalisierung in WordPress. Allerdings macht Core schon viel davon, um die Lokalisierung für sich zu laden.

Wenn Ihr Thema in der Größe notwendiger Übersetzungen nicht an WP-core herankommt oder diesen überschreitet, dann sind Sie wahrscheinlich in Ordnung. Wenn Sie sicher sein wollen – Profil performance und sicher sein. 🙂 Wenn Sie sich wundern, verschwenden Sie Ihre Zeit mit Hypothesen, die nicht unbedingt angegangen werden müssen.

Es gibt eine einfache Möglichkeit, dieses Problem zu umgehen. Speichern Sie alle Frontend-Nachrichten als Optionen für Ihr Thema. Lassen Sie uns eine Option ‘Nachrichten’ definieren:

 add_option('messages',array()); 

Jetzt müssen wir diese Option füllen. Lassen Sie uns die Standardwerte definieren:

 $theme_messages_defaults = array ( 'read-more' => __('Read more','tekko'), 'next-page' => __('Next page','tekko'), ... and so on ... ) 

Jetzt müssen wir die Voreinstellungen auf die Option übertragen. Wir möchten dies nur bei der Erstinstallation tun, wenn die Übersetzungsdateien aktualisiert wurden oder wenn der Benutzer die Sprache wechselt. Wenn dieser Test erfolgreich ist, führen Sie diese function aus:

 function run_only_at_install_or_new_version { global $theme_messages_defaults; var $messages = array(); foreach ($theme_messages_defaults as $message_key => $message_val) { $messages[$message_key] = $theme_messages_defaults[$message_val]; } update_option('messages',$messages); } 

Da die Option ein Array ist, benötigen wir eine etwas andere get_option function:

 function mytheme_get_message_option ($message_key) { $messages = get_option('messages'); $message = $messages[$message_key]; return $message; } 

Ersetzen Sie in Ihren Vorlagen alle Ihre Echo-statementen wie folgt:

 mytheme_get_message_option('read-more'); 

Vergiss nicht, dass du die Textdomäne nicht mehr im Frontend benötigst, also füge eine Bedingung in deine functionsdatei ein:

 if (is_admin()) load_theme_textdomain ('mytheme', 'path/to/languages'); 

Jetzt haben Sie alle Ihre Nachrichten an einem Ort und verhindern unnötige Übersetzungsaktionen. Eigentlich hast du noch mehr Möglichkeiten. Sie können die Nachrichten Ihren Optionsseiten hinzufügen und Ihre Kunden die Texte ändern lassen, ohne Vorlagen ändern zu müssen. Hey, wenn du Mods anstelle von Optionen verwendest, kannst du sie sogar zum Design-Customizer hinzufügen. run_only_at_install_or_new_version Sie, dass Sie run_only_at_install_or_new_version eine zusätzliche Bedingung run_only_at_install_or_new_version , um zu verhindern, dass run_only_at_install_or_new_version überschrieben werden, wenn das run_only_at_install_or_new_version aktualisiert wird.

Hinweis: Das oben Angezeigte wird von einem komplexeren Setup übernommen, das ich selbst benutze, daher könnte es Tipperrors geben. Wenn Sie in diesem Stadium der Fehlersuche sind, sollte dies kein Problem sein.