Wie übersetzt man Widget Beschreibung im Konstruktor?

Ich baue ein lokales Widget und die Übersetzung funktioniert überall, aber in der Sprachzeichenfolge im Konstruktor . Ich habe das gelesen

Die gesamte Plugin-Initialisierung muss an den Init-Hook gebunden sein

um dieses Problem zu vermeiden, aber ich weiß nicht, dies zu tun, denn wenn ich versuche, das Widget mit init anstelle von widgets_init zu registrieren, wird überhaupt nichts initialisiert.

Wie behebt man das?

Mein Code:

class Pinboard_Linkroll_Widget extends WP_Widget { // Constants & Properties go here... protected $widget_slug = 'pinboard-linkroll-widget'; /*--------------------------------------------------*/ /* Constructor /*--------------------------------------------------*/ /** * Includes pinboard API class, * Specifies the classname and description, instantiates the widget, * loads localization files, and includes necessary stylesheets and JavaScript. */ public function __construct() { // include pinboard api class // https://github.com/kijin/pinboard-api include_once( dirname(__FILE__). '/lib/pinboard-api.php' ); // load plugin text domain add_action( 'init', array( &$this, 'widget_textdomain' ) ); // actual widget constructor parent::__construct( $this->get_widget_slug(), __( 'Pinboard Linkroll Widget', $this->get_widget_slug() ), array( 'classname' => $this->get_widget_slug().'-class', 'description' => __( 'Returns a list of recent Pinboard Links.', $this->get_widget_slug() ) ) ); // handle token errors in admin area (check for valid token and display errors) add_action( 'sidebar_admin_setup', array( &$this, 'handle_token_errors' ) ); // delete transients when last widget instance is deleted // http://wordpress.stackexchange.com/questions/95091/how-to-delete-cached-transients-from-a-widget-instance-properly add_action( 'sidebar_admin_setup', array( &$this, 'delete_transient' ) ); } // end constructor /** * Returns widget slug * * @since 0.7.0 * @return Plugin slug variable. */ public function get_widget_slug() { return $this->widget_slug; } /** * Loads the Widget's text domain for localization and translation. * * @since 0.7.0 */ public function widget_textdomain() { load_plugin_textdomain( $this->get_widget_slug(), false, $this->get_widget_slug() . '/lang' ); } // end widget_textdomain // WP Widget API functions & other stuff goes here... } // register widget add_action( 'widgets_init', create_function('', 'return register_widget("Pinboard_Linkroll_Widget");') ); } 

Solutions Collecting From Web of "Wie übersetzt man Widget Beschreibung im Konstruktor?"

Sie haben leichte Timing-Probleme, weil Sie zuerst den Titel generieren (im Konstruktoraufruf), aber die Textdomänenladung auf einen späteren Zeitpunkt verschieben ( init mit der Standardpriorität). Die Textdomäne muss geladen sein, damit __() korrekt übersetzt wird. Diese sind nicht “faul”, sie generieren und geben Strings genau dort zurück, wo sie aufgerufen werden.

Die plugins_loaded sollte sehr früh geladen werden, empfiehlt Codex bei plugins_loaded für Plugins.

Vermutlich sollte Ihre class nicht versuchen, sowohl ein gültiges Widget als auch ein Plugin Loader zu sein.