ResourceBundle多語言國際化

在 Java 中,ResourceBundle 是一個用于國際化(i18n)和本地化(l10n)的一種機制,它使得程序能夠根據不同的區域設置(如語言、國家等)加載不同的資源文件。ResourceBundle 主要用于從外部資源文件中加載應用程序的文本信息、錯誤信息、標簽、提示消息等內容,從而支持多語言環境的切換。
ResourceBundle 的主要作用:
實現國際化和本地化:ResourceBundle 允許開發者將應用程序中的文本和其他文化特定的信息(如日期格式、貨幣符號等)分離到不同的文件中,程序可以根據用戶的語言環境動態加載對應的資源文件。
動態加載資源:ResourceBundle 會根據客戶端的語言、區域來選擇適當的資源文件,確保用戶看到的內容符合其本地文化的習慣。
使用場景:
多語言支持:例如,一個應用程序可以有多個語言版本(英語、法語、中文等),ResourceBundle 可以根據不同的用戶語言環境加載不同的資源文件。
定制區域信息:如日期、時間、貨幣等信息,可能在不同的地區和語言環境下表現不同,ResourceBundle 可以幫助處理這些差異。
如何使用 ResourceBundle
ResourceBundle 使用的是一種基于鍵值對的方式來存取資源。這些資源一般存放在 .properties 文件中。根據不同的區域設置,程序可以加載不同的 .properties 文件。

  1. 創建資源文件
    假設我們需要為一個應用程序提供英語和中文兩種語言的支持。
Messages_en.properties(英語)
greeting=Hello, World!
farewell=Goodbye!
Messages_zh.properties(中文)
greeting=你好,世界!
farewell=再見!
  1. 在 Java 中使用 ResourceBundle
import java.util.*;public class ResourceBundleExample {public static void main(String[] args) {// 設置當前的語言環境為英語Locale locale = new Locale("en", "US");ResourceBundle bundle = ResourceBundle.getBundle("Messages", locale);// 使用鍵來獲取資源System.out.println(bundle.getString("greeting"));  // 輸出:Hello, World!System.out.println(bundle.getString("farewell"));  // 輸出:Goodbye!// 設置當前的語言環境為中文locale = new Locale("zh", "CN");bundle = ResourceBundle.getBundle("Messages", locale);// 使用鍵來獲取資源System.out.println(bundle.getString("greeting"));  // 輸出:你好,世界!System.out.println(bundle.getString("farewell"));  // 輸出:再見!}
}
  1. 關鍵點:
    ResourceBundle.getBundle(“Messages”, locale) 會根據當前的 locale(語言環境)來加載相應的資源文件。例如,Messages_en.properties 會在英語環境下被加載,而 Messages_zh.properties 會在中文環境下被加載。
    bundle.getString(“key”) 會根據給定的鍵獲取對應的資源值。
    ResourceBundle 主要方法:
    getBundle(String baseName):根據給定的基礎名稱和默認的語言環境加載資源文件。
    getBundle(String baseName, Locale locale):根據給定的基礎名稱和指定的語言環境加載資源文件。
    getString(String key):根據給定的鍵返回對應的資源值。
    ResourceBundle 支持的文件格式:
    .properties 文件:最常見的格式。每個 .properties 文件都包含一組鍵值對,例如 key=value。
    ListResourceBundle:這是 ResourceBundle 的一個子類,用于通過代碼定義資源,而不是從 .properties 文件加載。
    進階使用:ListResourceBundle
    如果你不想使用 .properties 文件,而是想直接在 Java 代碼中定義資源,可以使用 ListResourceBundle 來創建資源。
import java.util.*;public class MyResourceBundle extends ListResourceBundle {@Overrideprotected Object[][] getContents() {return new Object[][] {{ "greeting", "Hello, World!" },{ "farewell", "Goodbye!" }};}public static void main(String[] args) {ResourceBundle bundle = ResourceBundle.getBundle("MyResourceBundle");System.out.println(bundle.getString("greeting"));  // 輸出:Hello, World!System.out.println(bundle.getString("farewell"));  // 輸出
[Something went wrong, please try again later.]

在 Java 中,ResourceBundle 系統通過 Locale 來判斷當前環境的語言和地區,并根據這些信息選擇相應的資源文件(如 .properties 文件)。Locale 是一個表示特定語言和地區的類。它通常包括語言、國家/地區、以及變體信息(如地區的不同語言習慣或日期格式等)。Java 會根據 Locale 自動選擇匹配的資源文件。
步驟:如何通過 Locale 識別中文環境還是英文環境
獲取 Locale 對象:Locale 是用來表示語言環境的類,它包含了語言、國家/地區和變體等信息。默認情況下,Locale.getDefault() 會返回 JVM 當前的默認 Locale(通常由操作系統設置)。
使用 ResourceBundle 讀取資源文件:ResourceBundle 會根據當前的 Locale 選擇合適的資源文件來加載。例如,你可以有一個 messages_en.properties 用于英文環境,messages_zh.properties 用于中文環境。
ResourceBundle 的工作原理:ResourceBundle 會根據當前的 Locale 查找匹配的文件。如果找不到完全匹配的文件,它會查找更一般的文件(如 messages.properties)。
例子:
假設我們有以下三個資源文件:

messages_en.properties (英文資源文件)
greeting=Hello
messages_zh.properties (中文資源文件)
greeting=你好
messages.properties (默認資源文件)
greeting=Welcome
代碼示例
import java.util.Locale;
import java.util.ResourceBundle;public class ResourceBundleExample {public static void main(String[] args) {// 獲取當前默認的 Locale(這通常由操作系統語言和區域決定)Locale currentLocale = Locale.getDefault();// 加載資源文件ResourceBundle bundle = ResourceBundle.getBundle("messages", currentLocale);// 獲取并打印 greeting 屬性String greeting = bundle.getString("greeting");System.out.println("Greeting: " + greeting);}
}

工作原理:
Locale.getDefault() 會根據系統的默認語言環境返回一個 Locale 對象。
如果系統的默認語言是英文(如美國,en_US),則 Locale.getDefault() 返回的就是 en_US。
如果系統的默認語言是中文(如中國,zh_CN),則返回 zh_CN。
ResourceBundle.getBundle(“messages”, currentLocale) 會嘗試加載對應的資源文件。比如:
如果 currentLocale 是 en_US,它會嘗試加載 messages_en_US.properties,如果沒有,則加載 messages_en.properties,如果再沒有,它會回退到 messages.properties。
如果 currentLocale 是 zh_CN,它會加載 messages_zh_CN.properties,如果沒有,則加載 messages_zh.properties,再沒有則回退到 messages.properties。
根據當前環境的語言,greeting 會返回不同的值:
在英文環境下,輸出 Hello。
在中文環境下,輸出 你好。
如果找不到匹配的語言文件,則會輸出 Welcome(來自 messages.properties)。
如何設置 Locale(手動設置)
你還可以手動設置 Locale,而不是依賴于操作系統的默認設置。例如,你可以強制使用英文環境或中文環境:

import java.util.Locale;
import java.util.ResourceBundle;public class ResourceBundleExample {public static void main(String[] args) {// 強制設置 Locale 為中文(中國)Locale locale = new Locale("zh", "CN");// 加載資源文件ResourceBundle bundle = ResourceBundle.getBundle("messages", locale);// 獲取并打印 greeting 屬性String greeting = bundle.getString("greeting");System.out.println("Greeting: " + greeting);}
}

總結:
ResourceBundle 根據當前的 Locale 加載資源文件,自動識別中文環境、英文環境或其他語言環境。
Locale.getDefault() 返回當前系統的默認 Locale,你可以通過 Locale 對象來獲取當前環境的語言、國家等信息。
資源文件命名規范:messages_.properties 或者 messages.properties。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/905607.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905607.shtml
英文地址,請注明出處:http://en.pswp.cn/news/905607.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

精益數據分析(62/126):從客戶訪談評分到市場規模估算——移情階段的實戰進階

精益數據分析(62/126):從客戶訪談評分到市場規模估算——移情階段的實戰進階 在創業的移情階段,科學評估用戶需求與市場潛力是決定產品方向的關鍵。今天,我們結合Cloud9 IDE的實戰經驗與《精益數據分析》的方法論&…

第四天——貪心算法——種花

1. 題目 有一個花壇,其中0 表示該位置是空的,可以種花。1 表示該位置已經有花,不能種花。 規則:新種的花不能種在相鄰的位置(即如果某個位置已經種了花,它的左右兩個相鄰位置不能再種花)。給定…

【重磅】配電網智能軟開關和儲能聯合規劃

目錄 1 主要內容 目標函數 數據說明 節點系統圖 2 部分代碼 3 程序結果 4 下載鏈接 1 主要內容 該程序復現《具有源荷不平衡特性的配電網智能軟開關和儲能聯合規劃》部分模型,未考慮聚類分析和分布魯棒部分,就智能軟開關和儲能聯合規劃部分進行了…

QMK固件OLED顯示屏配置教程:從零開始實現個性化鍵盤顯示(實操部分)

QMK固件OLED顯示屏配置教程:從零開始實現個性化鍵盤顯示 ?? 前言: 作為一名鍵盤愛好者,近期研究了QMK固件的OLED顯示屏配置,發現網上的教程要么太過復雜,要么過于簡單無法實際操作。因此決定寫下這篇教程,從零基礎出發,帶大家一步步實現鍵盤OLED屏幕的配置與個性化顯示…

中國科學院計算所:從 NFS 到 JuiceFS,大模型訓推平臺存儲演進之路

中科院計算所在建設大模型訓練與推理平臺過程中,模型規模與數據集數量呈爆發式增長。最初采用簡單的裸機存儲方案,但很快面臨數據孤島、重復冗余、管理混亂和資源利用不均等問題,于是升級到了 NFS 系統。然而,隨著使用強度增加&am…

飛牛NAS本地部署開源TTS文本轉語音工具EasyVoice與遠程使用流程

文章目錄 前言1. 環境準備2. Docker部署與運行3. 簡單使用測試4. 安裝內網穿透4.1 開啟ssh連接安裝cpolar4.2 創建公網地址 5. 配置固定公網地址總結 前言 本文主要介紹如何在fnOS飛牛云NAS使用Docker本地部署一款非常好用的開源TTS文本轉語音工具EasyVoice,并結合…

部署安裝jenkins.war(2.508)

實驗目的:部署jenkins,并與gitlab關聯bulid 所需軟件:jdk-17_linux-x64_bin.tar.gz jenkins.war apache-tomcat-10.1.40.tar.gz 實驗主機:8.10具有java環境,內存最少為4G,cpu雙核 目錄 jdk安裝 …

AEO認證的好處 ,如何快速獲取AEO認證?

AEO認證的好處及快速獲取方法 AEO(Authorized Economic Operator,經認證的經營者) 是海關對符合國際供應鏈安全標準的企業給予的認證,分為 AEO一般認證 和 AEO高級認證。獲得AEO認證可享受多項通關便利,提升企業國際貿…

(01)數字化轉型之采購管理:從計劃到退貨的精細化管控

引言:采購管理對企業運營的關鍵作用 在當今競爭激烈的商業環境中,采購管理已成為企業成本控制和供應鏈優化的核心環節。一項研究顯示,采購成本通常占企業總成本的60%-80%,而高效的采購管理可幫助企業降低5%-15%的采購成本。本文將…

技術視界 | 青龍機器人訓練地形詳解(四):復雜地形精講之斜坡

在前幾篇文章中,我們依次講解了如何創建一個地形、如何將地形添加到訓練環境中,并在上一期深入分析了復雜地形之一——臺階地形的創建方式與訓練意義。本文將繼續聚焦復雜地形訓練中另一類代表性地形——斜坡(Slope)與金字塔斜坡&…

【MySQL】多表連接查詢

個人主頁:Guiat 歸屬專欄:MySQL 文章目錄 1. 多表連接查詢概述1.1 連接查詢的作用1.2 MySQL支持的連接類型 2. 內連接 (INNER JOIN)2.1 內連接的特點2.2 內連接語法2.3 內連接實例2.4 多表內連接 3. 左外連接 (LEFT JOIN)3.1 左外連接的特點3.2 左外連接…

養豬場巡檢機器人的設計與應用研究

摘要 本論文針對傳統養豬場人工巡檢效率低、勞動強度大、數據準確性差等問題,設計了一種適用于養豬場的巡檢機器人。詳細闡述了該機器人的設計思路、技術原理、系統組成及功能特點,并通過實際應用案例分析其在養豬場中的應用效果。研究表明,養…

使用PEFT庫將原始模型與LoRA權重合并

使用PEFT庫將原始模型與LoRA權重合并 步驟如下: 基礎模型加載:需保持與LoRA訓練時相同的模型配置merge_and_unload():該方法會執行權重合并并移除LoRA層保存格式:合并后的模型保存為標準HuggingFace格式,可直接用于推…

適用于 iOS 的 開源Ultralytics YOLO:應用程序和 Swift 軟件包,用于在您自己的 iOS 應用程序中運行 YOLO

?一、軟件介紹 文末提供程序和源碼下載 該項目利用 Ultralytics 最先進的 YOLO11 模型將您的 iOS 設備轉變為用于對象檢測的強大實時推理工具。直接從 App Store 下載該應用程序,或瀏覽我們的指南,將 YOLO 功能集成到您自己的 Swift 應用程序中。 二、…

js關于number類型的計算問題

js中關于number類型的計算 因:在js中,number類型是用于表示數值的基本類型,它遵循 IEEE 754 雙精度浮點數(64 位)標準。這導致在某些計算中可能出現精度問題。 例:console.log(0.1 0.2); // 0.300000000…

RAG之大規模解析 PDF 文檔全流程實戰

PDF 文檔在商業、學術和政府領域無處不在,蘊含著大量寶貴信息。然而,從 PDF 中提取結構化數據卻面臨著獨特的挑戰,尤其是在處理數千甚至數百萬個文檔時。本指南探討了大規模解析 PDF 的策略和工具。 PDF解析挑戰 PDF 的設計初衷是為了提供一致的視覺呈現,而非數據提取。這…

TypeScript:類

一、基本概念 TypeScript 類是基于 ES6 類的語法擴展,增加了類型注解和訪問修飾符等特性,提供了更強大的面向對象編程能力。 二、基本語法 class Person {name: string;age: number;constructor(name: string, age: number) {this.name name;this.ag…

搶購Python代碼示例與技術解析

引言:搶購系統的技術挑戰 在當今電子商務高度發達的時代,搶購活動已成為各大電商平臺吸引用戶的重要手段。然而,高并發、低延遲的搶購場景對系統設計提出了嚴峻挑戰。本文將提供一個完整的Python搶購代碼示例,并深入分析其技術實…

實戰分析Cpython逆向

Cpython逆向 Python代碼轉換為C代碼的時候,將會大大增加框架代碼量。 1、正向py->c 先有正向,再有逆向 pip install cython 寫一個簡單的pyx文件 .pyx 文件是由 Cython 編程語言 "編寫" 而成的 Python 擴展模塊源代碼文件 print(&qu…

Modbus轉IEC104網關(三格電子)

產品概述 Modbus轉IE104網關型號SG-TCP-IEC104,是三格電子推出的工業級網關(以下簡稱網關),主要用于Modbus RTU/TCP/ASCII數據采集、DLT645-1997/2007數據采集,可接多功能電力儀表、溫控儀、電表等,將采集…