Sollten Shorcodes in i18n Plugins übersetzt werden und wenn ja, wie?

Internationalisierung eines Plugins mit einem halben Dutzend Shortcodes wie:

function plugin_show_schedule( $atts, ) { extract( shortcode_atts( array( 'type' => __('week', 'mz-mindbody-api') ), $atts ) ); //Do stuff return $something; } add_shortcode('plugin-show-schedule', 'plugin_show_schedule'); 

Und einen Artikel gefunden , der einige Möglichkeiten beschreibt, wie man Shortcodes wie folgt übersetzt:

 function plugin_show_schedule( $atts, ) { extract( shortcode_atts( array( __('type', 'my-plugin') => __('week', 'mz-mindbody-api') ), $atts ) ); $type = ${__('type', 'mz-mindbody-api')}; //Do stuff return $something; } add_shortcode(__('plugin-show-schedule', 'my-plugin'), 'plugin_show_schedule'); 

Ich kann type bekommen, um wie erwartet zu übersetzen, aber plugin-show-schedule bleibt in en_EN und es gibt Kommentare im obigen Artikel, die sagen:

  1. “das shortcode-tag übersetzt, ein anderes plugin konnte nicht zuverlässig in diesen filter einhaken”
  2. “Als Übersetzer mit 36 ​​Jahren Erfahrung kann ich nur lächeln – jeder echte professionelle Übersetzer, der es wert ist, kurze Codes zu erkennen, wird sie natürlich NICHT übersetzen!”

Aus meinem Verständnis heraus ist Englisch die grundlegende Sprache der Programmierung, aber meine Erfahrung ist auch ziemlich anglozentrisch. Wird von internationalisierten Plugins erwartet, dass sie Shortcodes übersetzt haben, und wenn es ratsam ist, warum funktioniert mein Code nicht?

BEARBEITEN:

Basierend auf der Antwort unten ist die Ersatzmethode für den extract :

 $atts = shortcode_atts( array( 'type' => '1' ), $atts ); $type = $atts['type']; 

(Jetzt ist die Quelle von $type im aktuellen Bereich sichtbar.)

Solutions Collecting From Web of "Sollten Shorcodes in i18n Plugins übersetzt werden und wenn ja, wie?"

Bevor ich anfange, sollten Sie niemals extract() . Es ist unzuverlässig und extrem schwer zu debuggen, wenn es fehlschlägt. Aus diesen spezifischen Gründen wurde es (fast) vollständig aus dem core und dem Codex entfernt. Weitere Details finden Sie im Trac-Ticket 22400 . Zusammen mit query_posts sind dies die zwei am häufigsten verwendeten und zwei schlechtesten functionen zu verwenden.

Lass uns zum eigentlichen Punkt zurückkehren. Shortcode-Namen und Attributschlüssel sollten niemals übersetzbar sein und sollten immer in Englisch sein. Es ist schlecht und errorsanfällig, es sonst zu tun.

GRÜNDE (SHORTCODE NAMES)

  • Wenn ein Shortcode-Name übersetzbar gemacht wird, kann jeder Text als Shortcode-Name verwendet werden. Was dies beinhaltet, ist folgendes:

    Ich habe einen [somename] . Jetzt kann ich entscheiden, es wie folgt zu verwenden, [anothername] . Ich [anothername] ein Plugin herunter, das einen Shortcode namens [anothername] . KNALL!!! Sie haben einen Namenskonflikt. Welcher Shortcode sollte geladen werden?

    Wörter mit gleicher Schreibweise haben unterschiedliche Bedeutungen in verschiedenen Sprachen, aber die Schreibweise des Wortes ist ein gültiges Wort in Englisch. Nimm das einfache Wort Knall . Im Englischen ist ein Wort, das den Klang einer Explosion beschreibt. In Afrikaans, was meine Muttersprache ist, bedeutet es Angst, wenn es ins Englische übersetzt wird. Jetzt habe ich einen Shordcode [afraid] . Weil ich Afrikaans bin, will ich es [bang] . Ich lade ein explosives Plugin mit einem Shortcode [bang] und BOOM herunter !!! geht alles. ( Boom ist das Afrikaans-Wort für Baum , ein anderes Wort, das auf Englisch und eine andere Sprache mit unterschiedlichen Bedeutungen gültig ist

GRÜNDE (ATTRIBUTSCHLÜSSEL)

  • PHP erlaubt keine doppelten Schlüssel. Nehmen Sie das folgende Szenario

    Ich habe einen folgenden Shortcode: [someshortcode key='value'] . In meinem Shortcode sind meine Attribute __( 'key' ) => 'default' und 'somekey' => 'some other value' . Da ich einen beliebigen Text für den key eingeben kann, entscheide ich mich, somekey als übersetzten Wert zu verwenden. BOOM!!! Ihr Shortcode schlägt fehl und gibt unerwartete Ergebnisse und Sie wissen nicht warum. Du verbringst Stunden damit, zu debuggen und zu fluchen, nur um herauszufinden, dass deine Übersetzung der Schuldige ist

  • Shortcode-Attribute sind filterbar, wenn der dritte Parameter shortcode_atts gesetzt ist. Wenn die Attributschlüssel übersetzbar gemacht werden, kann dies zu unerwarteten Ergebnissen führen, wenn die Attribute über diese Filter gefiltert werden

Dies sind nur ein paar wichtige Hinweise, warum Shortcode-Namen und Attribute nicht übersetzbar sind.

Sie sollten nur Text übersetzbar machen, der an den Bildschirm gesendet wird und was für den Endbenutzer sichtbar ist. Und denken Sie daran, obwohl es für Sie keinen Sinn ergibt, bleiben Sie bei der Entwicklung von Themen und Plugins auf Englisch