我正在嘗試將在此處找到az_AZ_#Latn的這個 String 轉換為 Locale 但我無法決議該部分。#Latn
如果我這樣做,new Locale("az_AZ_#Latn")我會丟失#Latn部分(腳本代碼)。
我也嘗試過使用LocaleUtilsfrom commons-lang 但我收到一個錯誤,說它是無效的格式。
uj5u.com熱心網友回復:
正如檔案中所寫:
在 JDK 7 之前的版本中,無法在 Locale 物件上設定腳本代碼。
但是你可以使用它Locale builder來使它像這樣:
Locale locale = new Locale.Builder().setLanguage("az").setRegion("AZ").setScript("Latn").build();
您可以通過呼叫獲取腳本locale.getScript()
編輯:
這是我將字串轉換為語言環境的方法(不適用于擴展):
public static Locale stringToLocale(String locale){
if(locale == null || locale == "") return null;
String[] parts = locale.split("_");
if(parts.length == 1) return new Locale(parts[0]);
if(parts.length == 2) return new Locale(parts[0],parts[1]);
if(parts.length == 3)
if(parts[2].charAt(0) != '#') return new Locale(parts[0],parts[1],parts[2]);
else return new Locale.Builder().setLanguage(parts[0]).setRegion(parts[1]).setScript(parts[2].substring(1)).build();
if(parts.length == 4) return new Locale.Builder().setLanguage(parts[0]).setRegion(parts[1]).setVariant(parts[2]).setScript(parts[3].charAt(0)=='#'? parts[3].substring(1):null).build();
return null;
}
//works for the toString output expect for extensions. test: for(Locale l: Locale.getAvailableLocales()) System.out.println(l.equals(stringToLocale(l.toString())));
// output : true true true...
用法:
Locale l = stringToLocale("az_AZ_#Latn");
uj5u.com熱心網友回復:
Locale.Builder能夠處理語言環境的腳本資訊。該類的檔案Builder還包括此示例代碼:
Locale aLocale = new Locale.Builder().setLanguage("sr")
.setScript("Latn")
.setRegion("RS")
.build();
通過使用構建器,您必須自己拆分字串并洗掉任何不受支持的字符,例如#.
使用 3-arg 構造java.util.Locale.Locale(String, String, String)函式是不正確的,因為您可能不打算使用Latn腳本來指定變體。
uj5u.com熱心網友回復:
如果格式一致(您的輸入看起來總是相同的),您可以逐個拆分#并_獲取部分。
請參見以下示例:
var input = "az_AZ#Latn"
var lns = input.split("#")
var l = lns[0].split("_")
var locale = new Locale.Builder()
.setLanguage(l[0])
.setRegion(l[1])
.setScript(lns[1])
.build()
locale.getLanguage() // ==> "az"
locale.getCountry() // ==> "AZ"
locale.getScript() //==> "Latn"
uj5u.com熱心網友回復:
#Latn 指的是在這種情況下是拉丁文的腳本。
來自java檔案:
腳本 ISO 15924 alpha-4 腳本代碼。您可以在 IANA 語言子標簽注冊表中找到有效腳本代碼的完整串列(搜索“型別:腳本”)。script 欄位不區分大小寫,但 Locale 始終規范化為標題大小寫(第一個字母為大寫,其余字母為小寫)。格式正確的腳本值的格式為 [a-zA-Z]{4} 示例:“Latn”(拉丁文)、“Cyrl”(西里爾文)
如果你想使用腳本創建一個 Locale,你可以先創建一個BaseLocale然后實體化Locale使用它。
例如:
BaseLocale bl = BaseLocale.getInstance("af","Latn","ZA","");
Locale.getInstance(bl,null).getDisplayScript();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/480294.html
