Wir verwenden MessageFormat
, um Übersetzungen in unserer Anwendung zu verwalten. Wir haben eine Wrapper-Klasse (TranslationWrapper
), die den Übersetzungsschlüssel und seine Parameter enthält.Formatieren rekursiv mit Locale in MessageFormat
Wenn eine übersetzte Nachricht angezeigt wird, wird es mit diesem Befehl
String message = new MessageFormat(translationKey, aLocale).format(parameters);
formated Wo translationKey
in einem Format ist ähnlich zu „-Nachricht {0} {1}“, und Parameter, wird ein Objekt-Array, die Werte enthalten, für {0} und {1}.
Da jedes Objekt als Parameter verwendet werden kann, verwenden wir oft unseren TranslationWrapper
als Parameter. Dies ermöglicht es uns, lokalisierte Strings zu erstellen, die auf implizierten Übersetzungsschlüsseln basieren.
Für jedes Objekt, das als Parameter übergeben wird, wird die Methode toString()
aufgerufen. Die toString()
-Methode von TranslationWrapper
wird automatisch mit dem Gebietsschema des aktuellen Benutzers übersetzt, aber manchmal möchte ich ein anderes Gebietsschema verwenden.
Da ich diese verschiedenen Locale zum MessageFormat
in seinem Konstruktor übergeben, würde ich gerne wissen, ob es einen Weg gibt Strings in MessageFormat
erzeugt werden, um die Parameter einen Griff auf dem Weg zu haben, wenn Werte wie {0} zu ersetzen. Anstatt den Aufruf der toString()
Methode auf dem TranslationWrapper
, würde Ich mag, wie etwas nennen:
toString(locale);
wo locale die Locale ist ich in den Konstruktor übergeben.
Noch viel weniger hässlich als die Abhilfe, die ich im Sinn hatte, . Als Referenz für andere wie mich, die nicht über Gewinde lokale Variablen wissen, hier ist ein Deklaration Beispiel: 'private statische final ThreadLocal threadLocale = new ThreadLocal ();' –
Ich werde dies in die Antwort setzen – hoaz