6

国際的な Web サイトに Java + Spring を使用しています。

2 つの言語は、ZH と EN (中国語と英語) です。

私は 2 つのファイルを持っています: messages.properties (英語のキーと値のペア) と messages_zh.properties です。

サイトは #springMessage タグを使用して英語でコーディングされています。次に、Poeditor.com を使用して、翻訳者に英語のフレーズごとに中国語の値を提供してもらいます。そのため、英語の messages.properties ファイルは常に完全で、messages_zh.properties ファイルには常にすべてのキーがありますが、数日後に翻訳者から翻訳を受け取るため、messages_zh.properties ファイルのが空白になることがあります。

中国語の値が欠落している場合は常に、(自分の Web サイトで) 同等の英語の値を表示するシステムが必要です。

中国語の値が利用できないときはいつでも、Spring に「フォールバック」して英語を使用するように指示するにはどうすればよいですか? これを値ごとに行う必要があります。

現在、中国語の値が欠落しているサイトの空白のボタン ラベルが表示されます。中国語が空白の場合は常に英語 (既定の言語) を使用することをお勧めします。

4

2 に答える 2

6

この目的のために、独自のカスタム MessageSource を作成できます。

何かのようなもの:

public class SpecialMessageSource extends ReloadableResourceBundleMessageSource {

      @Override
      protected MessageFormat resolveCode(String code, Locale locale) {
         MessageFormat result = super.resolveCode(code, locale);
         if (result.getPattern().isEmpty() && locale == Locale.CHINESE) {
            return super.resolveCode(code, Locale.ENGLISH);
         }
         return result;
      }

      @Override
      protected String resolveCodeWithoutArguments(String code, Locale locale) {
         String result= super.resolveCodeWithoutArguments(code, locale);
         if ((result == null || result.isEmpty()) && locale == Locale.CHINESE) {
            return super.resolveCodeWithoutArguments(code, Locale.ENGLISH);
         }
         return result;
      }
   }

この messageSource Bean を spring xml で次のように構成します。

<bean id="messageSource" class="SpecialMessageSource">
.....
</bean>

解決されたラベルを取得する MessageSource'sには、以下のいずれかのメソッドを呼び出します

String getMessage(String code, Object[] args, Locale locale);
String getMessage(String code, Object[] args, String defaultMessage, Locale locale);

resolveCode()argsメッセージラベルに引数があり、以下のようなパラメーターを介してそれらの引数を渡し、呼び出したときに呼び出され
invalid.number= {0} is Invalid
ますmessageSource.getMessage("INVALID_NUMBER", new Object[]{2d}, locale)

resolveCodeWithoutArguments()メッセージラベルに引数がなく、argsパラメーターを null として渡し
validation.success = Validation Success
て呼び出した場合に呼び出されますmessageSource.getMessage("INVALID_NUMBER", null, locale)

于 2013-08-09T19:34:02.577 に答える