SpringBoot特別研究Part16:SpringBoot国際言語切り替え機能(国際化)を達成

国際化とは何ですか

それは国際的事実言語情報に非常に大きな国際の動的効果を表示するには、ブラウザ経由で聞こえる
ことがあり人気を英語で表示するときのショー中国語、英語がボタンをクリックすると、ボタンをクリックして当然のは、(他の言語をサポートしています

国際実装手順:

  • 1)、国際的なプロファイルを作製し
  • リソースファイルの2)を使用してResourceBundleMessageSource国際経営
  • 3)ページのコンテンツの国際化を削除します

内部SpringBootが設定されているその底部に第一のステップ2とステップ3を達成し、従って、唯一の国際プロファイルを作成する必要がありました

まず、国際的なプロファイルの作成

ライティング国際プロファイルが表示される国際ニュースページを描かれている
ために、人気がある「翻訳」するテキスト抽出

リソースでは、パケットの国際プロファイルを格納するためのリソースディレクトリを作成し
、その後、プロファイルlogin.properties作成
フォーマットの命名:ページ名_ _言語コードの国コードの.propertiesファイルを

IDEAは、それが自動的にビューの国際化に切り替わります認識すると
ここに画像を挿入説明
、このような場合はちょうど国際的な知名度を作成することができ
、右のプラス記号(+)をクリックし
ここに画像を挿入説明
、入力言語コード_国コードが自動的に生成されたコンフィギュレーションファイルを指定できます
ここに画像を挿入説明
することができ、その後、左下のプロファイルでリソースバンドルは、角度ビューの切り替え]をクリックし
ここに画像を挿入説明
、言語の設定を追加するには、プラス記号(+)の左上にクリックして
ここに画像を挿入説明
設定されたモデルは、言語セクションを変換するすべての必要性をコピーするので、
ここに画像を挿入説明

第二に、自動国際化

SpringBootは自動的にコンポーネントが国際リソースファイルを管理して構成されています

次のようにコードの言語リソースクラスの基礎となる自動設定は以下のとおりです。

@ConfigurationProperties(prefix = "spring.messages")
public class MessageSourceAutoConfiguration {
    
    /**
	 * Comma-separated list of basenames (essentially a fully-qualified classpath
	 * location), each following the ResourceBundle convention with relaxed support for
	 * slash based locations. If it doesn't contain a package qualifier (such as
	 * "org.mypackage"), it will be resolved from the classpath root.
	 */
	private String basename = "messages";  
    ...
}

デフォルトのプロファイルは、基礎という名前のメッセージで見ることができ
、設定ファイル名をベース例えばzh_CNに取り除くの名前で
利用可能spring.messagesを構成する
パッケージは、経路探索からのクラスが含まれている場合、ベース名が名を含んでいてもよいです

次に、コンフィギュレーション・ファイルにアクセスしてください設定
例:spring.messages.basename=i18n.login
パスの意義は、国際化パッケージから基礎という名前のログイン構成ファイルを見つけるように構成されて
SpringBootは、当社の国際プロファイル設定を見つけることができるように設計されて

第三に、ページの国際値へのアクセス

Thymeleaf #{}文法は、国際的な情報を取得するために使用される
値は簡単に国際的に得ることができるので、

交換する表現:番目の使用
ここに画像を挿入説明
あなたが国際自動的にできるよう、

ゴミ問題:

IDEAのデフォルトは、このように文字化け原因ASCIIコード中国人に変換されることはありません
設定でエンコードして、選択し[ファイルを自動的にASCIIコードに変換し
ここに画像を挿入説明
、デフォルトの設定が基づいているように、ブラウザの言語の
言語は、自動的にデフォルトとして識別されているものとブラウザ言語
ここに画像を挿入説明
ここに画像を挿入説明

もちろん、あなたも手動で言語を切り替えるには、ボタンをクリックすることができます

より一般的な貿易のウェブサイトの一部にこの機能

原理:
有し国際ロケールエリア情報オブジェクトLocaleResolverのために使用されるコンポーネント領域情報オブジェクトを取得します

デフォルトの設定もSpringBootエリア情報パーサである
コードの基礎となります:

@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(prefix = "spring.mvc", name = "locale")
public LocaleResolver localeResolver() {
    if (this.mvcProperties.getLocaleResolver() == WebMvcProperties.LocaleResolver.FIXED) {
        return new FixedLocaleResolver(this.mvcProperties.getLocale());
    }
    AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
    localeResolver.setDefaultLocale(this.mvcProperties.getLocale());
    return localeResolver;
}

ことを意味し、指定の固定領域パーサーは、固定さもなければを使用する場合AcceptHeaderLocaleResolver使用
及びAcceptHeaderLocaleResolverロケール国際続いブラウザのリクエストヘッダから情報を得ることである
要求を送信するときにヘッドがブラウザリクエストで言語を受け入れるためブラウザのデフォルトの言語の内部のフィールド
AcceptHeaderLocaleResolverは、デフォルトでは、この言語を、ブラウザを識別することです

だからLocaleResolverを置き換えるため

フロントエンドで必要はリンクエリアの切り替えボタンの情報を運びます

<a class="btn btn-sm" th:href="@{/index.html(language=zh_CN)}">中文</a>
<a class="btn btn-sm" th:href="@{/index.html(language=en_US)}">English</a>

スイッチの言語へのリンクをクリックすると、リクエストを送信するために言語パラメータをもたらす場合には

したがって、次のURLは、情報領域を運ぶことができるようになります:

http://ip:端口/XXXX/index.html?language=zh_CN

そして、バックエンドには、独自の地域パーサクラスを作成する必要があり、インタフェースLocaleResolverを実装する
コードに直接:

public class MyLocaleResolver implements LocaleResolver {

    // 解析区域信息
    @Override
    public Locale resolveLocale(HttpServletRequest request) {
        // 从URL的参数中获取区域信息
        String language = request.getParameter("language");
        // 区域信息默认用系统识别的
        Locale locale=Locale.getDefault();
        // 若获取的区域参数不为空 即 URL带有区域信息
        if (!StringUtils.isEmpty(language))
        {
            // 根据中间的下划线分隔成两部分
            String[] s = language.split("_");
            locale=new Locale(s[0],s[1]);
        }
        return locale;
    }

    @Override
    public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {

    }
}

そして、春のコンテナ内の独自の構成クラスでの書き込みに独自のパーサークラスエリアを追加(@Beanコメントを追加することを忘れないでください)

@Bean
public LocaleResolver localeResolver()
{
        // 直接返回自己配置的区域解析器
        return new MyLocaleResolver();
}

だから、あなた自身の地域のパーサは組み込みパーサ地域置き換えますSpringBootアウト仕事のことができるように設定し
達成され、最終的な効果をURLにするときの言語を指定するために使用されている地域情報が自動的にエリア情報と、ブラウザのURLに依存していないとき言語認識


公開された174元の記事 ウォンの賞賛5 ビュー24万+

おすすめ

転載: blog.csdn.net/Piconjo/article/details/104934578