1. 程式人生 > >Android獲取指定語言字串

Android獲取指定語言字串

由於近期應用加強了對多語言的適配,所以現在應用內有n種語言(10多種),然後統計的時候產品說只要上傳英文的字串.所以對於應用內的資料,在不修改語言的前提下,要將上傳的字串統一為英語.

廢話不多說,直接附上程式碼

/**
 * Created by panruijie on 2017/12/26.
 * Email : [email protected]
 */
public class LanguageUtil {

    public static final String TAG = "LanguageUtil";
    private static final String APPNAME = "you app packagename"
; public static final String ERROR_LABEL = ""; private static final String DEFAULT_COUNTRY = "US"; private static final String DEFAULT_LANGUAGE = "en"; public static String getStringByLocale(Context context, int stringId, String language, String country) { /*for (Locale locale : getAvailableLocales()) { String lang = locale.getLanguage(); String coun = getCountryPrivate(locale); String localeStr = country.equals("") ? language : (language + "_" + country); Loger.w("ruijie", "language = " + lang + ", country = " + coun + "," + "localeStr = " + localeStr); }*/
Resources resources = getApplicationResource(context.getApplicationContext().getPackageManager(), APPNAME, new Locale(language, country)); if (resources == null) { return ERROR_LABEL; } else { try { return resources.getString(stringId); } catch
(Exception e) { return ERROR_LABEL; } } } public static String getStringToEnglish(Context context, int stringId) { return getStringByLocale(context, stringId, DEFAULT_LANGUAGE, DEFAULT_COUNTRY); } private static Resources getApplicationResource(PackageManager pm, String pkgName, Locale l) { Resources resourceForApplication = null; try { resourceForApplication = pm.getResourcesForApplication(pkgName); updateResource(resourceForApplication, l); } catch (PackageManager.NameNotFoundException e) { } return resourceForApplication; } private static void updateResource(Resources resource, Locale l) { Configuration config = resource.getConfiguration(); config.locale = l; resource.updateConfiguration(config, null); } }

思路在於通過應用名找到對於的應用的Resources,在不修改resources的前提下,不影響當前應用的語言,獲取其資源.同理,只要知道其他應用的包名,可以獲取其所有的字串.

後來在測試種,給一個bean設定了一個字串id,如R.string.appname:
Bean bean = new Bean();
bean.setId(R.string.appname);
這樣進行設定之後,會發現錯誤.會丟擲ResourceNotFoundException,這是因為對於字串,或者圖片drawable之類進行id獲取,需要通過以下方法進行獲取:

int stringId = context.getResources().getIdentifier(resourceId, "srting", "your package name");
int drawableId = context.getResources().getIdentifier(resourceId, "drawable", "your package name");

這樣,經過這樣的方法,我們可以輕鬆的拿到字串了.用法如下:
String appName = LanguageUtil.getStringToEnglish(context, stringId);

如果要獲取指定國家和語言的字串,同理,加入國家和語言即可:
String appName = LanguageUtil.getStringByLocale(context, stringId, “en”, “US”);

相關推薦

Android獲取指定語言字串

由於近期應用加強了對多語言的適配,所以現在應用內有n種語言(10多種),然後統計的時候產品說只要上傳英文的字串.所以對於應用內的資料,在不修改語言的前提下,要將上傳的字串統一為英語. 廢話不多說,直接附上程式碼 /** * Created by pan

IOS/Android開發用遞迴法獲取指定開始字串到結尾字串中間內容

前言 最近在做ios開發的時候,突然遇到了一個需求,感覺挺有意思的就拿出來記錄一下.效果圖是這樣的: 乍一看,就是幾個特殊關鍵字變色嘛,沒什麼難的,我原本以為後臺的介面會把要變色的關鍵字單獨給我個欄位,裡面儲存一個變色字元陣列,可是當我拿到介面的時候,挺懵逼的,因為後臺給

Android 獲取指定圖片或檔案的大小

/** * 獲取指定檔案大小    */ public static long getFileSize(File file) throws Exception { long size = 0; if (file.exists()) { FileInputStrea

android 獲取指定路徑下所有檔案,將檔案從一個目錄copy到另一個目錄,執行linux命令

/** * 複製整個資料夾內容 ,可以從data/data/包名下 拷貝到 data/data/包名下。也可以copy到 /sdcard 下 * @param oldPath String 原檔案路徑 如:c:/fqf

利用java正則表示式來解析並獲取指定字串

Java的正則表示式不僅可以用來匹配驗證字串是否符合標準型別,還可以用來解析字串,獲取自己想要得到的資料。在java.util.regex包下提供了系列的類來對字串進行匹配。來看一下下面的例子: public static String parse (String s)

android 獲取手機語言類別

判斷android裝置當前設定的為什麼語言使用Locale類中getLanguage()方法; 一般獲取到的比如中文為zh,英文為en,日文為ko; 要獲得具體的類別使用toString()方法。 比如繁體為zh_TW,簡體為zh_CN。英文中有en_GB;日文有k

Android獲取不同語言目錄下的字串

首先建立兩個API: private final static String LAN_FR = "fr"; private final static String LAN_ES = "es"; Resources getResourcesB

android中如何獲取指定目錄下的圖片

圖片文件 tor 註意 plain mage 限制 asto tco 語句 需要對指定目錄的圖片文件進行列表,借鑒了網上的方法,發現列表出來是所有的文件,這樣用起來很不方便,在這裏也沒找到解決的辦法,經過自己的進一步研究終於搞定,發上來給有用的同學。用下面這種方式能實現查詢

Android 獲取手機的廠商、型號、Android系統版本號、IMEI、當前系統語言等工具類

parameter toc systems star lan gets post version -h 最近在開發中,需要用到一些系統信息,這裏我把這些方法寫成一個工具類方便以後復用,該工具類有以下6個功能: 1、獲取手機制造廠商 2、獲取手機型號 3、獲取手機系統當前使用

JS_正則表示式_獲取指定字元之後指定字元之前的字串

一個常見的場景,獲取:標籤背景圖片連結: 如字串:var bgImg = "url(\"https://img30.360buyimg.com/sku/jfs/t26203/262/100869187/204098/1d1479e9/5b84b80bNf39db45f.jpg\")";   指

Android 獲取螢幕指定座標的顏色

用到的API MediaProjectionManager MediaProjection VirtualDisplay ImageReader 原理:利用Android系統提供的投影功能把螢幕投影到ImageReader中,通過ImageRead

字串遞迴獲取指定字元位置內容資訊

針對目前字串處理indexof 無法直接獲取指定到的位置字元處理 /// <summary> /// 字串擷取,獲取 /// 原字串:啊啊啊\\不不不\\擦擦擦\\嗯嗯嗯\\打算 /// 次數是1: 啊啊啊\\

[Swift]字串根據索引獲取指定字元,依據ASCII編碼實現字元和整數的快速轉換

ASCII(American Standard Code for Information Interchange,美國資訊交換標準程式碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言。 它是現今最通用的單位元組編碼系統,並等同於國際標準ISO/IEC 646。

Android 播放視訊並獲取指定時間的幀畫面

轉載:https://blog.csdn.net/u011506413/article/details/51704445   Android 播放視訊並獲取指定時間的幀畫面   六.VideoView播放視訊,MediaMetadataRetriever獲取幀畫面

Qt 字串擷取 獲取指定字元位置

獲取字元在字串中的位置 QString str = "AT+LOC+LOCATION: 115.850441,33.004833"; QString s = "LOC"; str.indexOf(s); //3 str.indexOf(s, 6); //7 擷取指定位置字

獲取指定字串

題目描述 給定字串 str,檢查其是否包含 連續3個數字  1、如果包含,返回最新出現的 3 個數字的字串 2、如果不包含,返回 false 示例1 輸入 複製 '9876543' 輸出 複製 987 知識點: \w 匹配字母或數字或下劃線或漢字

如何獲取NSString的字元長度以及如何獲取指定字元長度字元的字串

//首先先新建一個NSString的Category類 //獲取NSString對應的字元長度- (int)chineseLength { int asciiCount = 0; in

Android Studio中apk簽名打包 以及獲取 應用簽名字串

在微信開放平臺,申請移動應用的時候: https://open.weixin.qq.com/cgi-bin/appcreate?t=manage/createMobile&type=app&lang=zh_CN&token=60682ddfbd9106b1c4b1f9d70f56

Java給指定URL字串新增值和獲取URL字串中的引數值

/** * 在指定url後追加引數 * @param url * @param data 引數集合 key = value * @return */ private static String appendUrl(String url, Map<String,

Android 獲取字串首字母,並對字串列表進行排序。

最近在瞭解環信的過程中,看到裡面有一個可以根據使用者名稱對使用者進行排序的處理。今天單獨測試了一下, 在此做一個整理。 由於工具類HanziToPinyin.class程式碼量有點多,我就放到最後。 先來看獲取一箇中文字串的首字母方法: /** *