Java軟體開發學習筆記(二)

來源:互聯網
上載者:User
筆記 1. 相關知識
1.1 Java程式設計語言是從一開始就支援軟體本地化的第一個程式設計語言。
所有的字串都使用Unicode

1.2 要本地化的內容:
數字 123,456.78 英國 ; 123.456,78 德國
貨幣
日期 3/22/61 美國 ; 22.03.1961 德國
March 22,1961 ; 英文 22. Marz 1961 德語 ; 1961年3月22日 中文
時間
文本
-> 圖形化使用者介面(集中以上情況)

1.3 Locale類
locale, 簡單來說是指語言和地區進行特殊組合的一個標誌
語言、國家和變體(language_country_variant)
預定義Locale對象
getDefault, getAvailableLoacles

1.4 資訊格式化
java.text.MessageFormat

2. 資源套件
2.1 資源套件的載入
ResourceBundle currentResources = ResourceBundle.getBundle("ProgramResources", currentLocal);

getBundle 將設法載入下面這些類之一,直到載入成功為止:
ProgramResources_language_country_variant
ProgramResources_language_country
ProgramResources_language
ProgramResources

不成功,將用default loacal 來代替 currentLocal 進行重新載入
如果還不成功,將拋出 MissingResourceException 異常

getBundle 找到一個類,將繼續尋找下一個類,建立起資源階層。
資源階層中的每個層次不一定都要存在

2.2 資源的檢索
String buttonLabel = currentResources.getString("addButton");
某個資源在子類中沒有檢索到,將從建立起的資源階層中的父類中進行檢索

2.3 資源的分類
可以根據資源檢索時候的參數來分類,也可以將不同的資源放到不同的資源套件中

同時,資來源物件可以存放任何類型的對象,不僅是字串
Color backColor = (Color)currentResources.getObject("backColor");
對此的處理參考2.4.2


2.4 資源套件的建立
2.4.1 建立自己的資源套件類
必須繼承於 ResourceBundle , 並要實現下面2個方法:
Enumeration getKeys();
Object handleGetObject(Stirng key);
樣本:
public class ProgramResources extends ResourceBundle
// place getKeys method in common superclass
{
public Enumeration getKeys()
{
return Collections.enumeration(Arrays.asList(keys));
}

private String[] keys = { "button", "backColor", "defaultSie" };
}

public class ProgramResources_de extends ProgramResources
{
public Object handleGetObject(Stirng key)
{
if (key.equals("button"))
return "Rechnen";
else if (key.equals("backColor"))
return Color.black;
else if (key.equals("defaultSie"))
return new double[] {210, 297};
}
}

public class ProgramResources_en_US extends ProgramResources
{
public Object handleGetObject(Stirng key)
{
if (key.equals("button"))
return "Compute";
else if (key.equals("backColor"))
return Color.blue;
else if (key.equals("defaultSie"))
return new double[] {216, 279};
}
}

為每個資源套件編寫這種代碼是相當煩瑣的。可以採取以下方法。

2.4.2 JDK提供的類
ListResourceBundle和PropertityResourceBundle

使用ListResourceBundle類,你可以將自己的所有資源放入一個對象數組中,然後它能夠為你進行資源的尋找:
public class ProgramResources_de extends ListResourceBundle
{
public Object [][] getContents() {return contents; }

private static final Object[][] contents
{
{"button", "Rechnen"},
{"backColor", Color.black},
{"defaultSie", double[] {210, 297}}
}
}

public class ProgramResources_en_US extends ListResourceBundle
{
public Object [][] getContents() {return contents; }

private static final Object[][] contents
{
{"button", "Compute"},
{"backColor", Color.blue},
{"defaultSie", double[] {216, 279}}
}
}

如果你的全部設定都是字串型,那麼你就可以使用更發布的PropertityResourceBundle機制:
將全部字串放入一個屬性檔案,每行都是一對關鍵字/值對
button=Rechnen
backColor=black
defaultSie=210X297

button=Compute
backColor=blue
defaultSie=216X279
並按以下格式命名屬性檔案
ProgramStrings.properties
ProgramStrings_de.properties
ProgramStrings_en_US.properties
像下面這樣裝載資源
ResourceBundle bundle = ResourceBundle.getBundle("ProgramStrings", local);
getBundle找出相似的屬性檔案,並將它轉換成PropertityResourceBundle。不用直接使用PropertityResourceBundle
不足之處:
需要在程式中對各個字串進行分析

最好的解決辦法:
將字串資源放入到屬性檔案,並且將ListResourceBundle用於那些不是字串的資來源物件。

注意事項:
轉換:
用於儲存屬性的檔案通常是7位的ASCII檔案,需要用native2ascii根據來轉換位Unicode字元
default:
ProgramStrings.properties中放置美式英語字串和資訊
以便在裝載本地資源檔失敗後裝載入default資源都能看得懂

3. 圖形化使用者介面的本地化需要注意的事情
不要對標籤Label進行判斷
對資源套件中不同語言的字串的長度要考慮

4. 我們的封裝
基本類:XStringManager 字串管理器類,從資源檔中擷取字串
擴充:其他用到字串的地方
XResourceManager:用以擷取指定資源,包括:URL和對象等
XComponentBuilder:統一建立可視組件對象
XErrorManager:根據錯誤碼擷取錯誤資訊




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.