2012-11-23 35 views
13

Tôi muốn chỉ nhận các ngôn ngữ có sẵn cho ứng dụng Android của mình, tức là những ngôn ngữ mà tôi có thư mục có tên values- (ví dụ: values-en, values-fr) trong thư mục res.Nhận các ngôn ngữ có sẵn cho một ứng dụng

Tôi không muốn lưu trữ mã ngôn ngữ và tôi nghĩ rằng liệt kê tất cả các thư mục con "res" của giá trị biểu mẫu- * và lấy mã ngôn ngữ từ tên của chúng. (cuối cùng kiểm tra xem mã có nằm trong mảng được trả về bởi Locale.getAvailableLocales() để chắc chắn rằng mã đó là chính xác). Ý tưởng này được nêu ở đây How to get the available languages (Not all of them, just the languages available on my app).

Tôi đã cố gắng sử dụng

getResources().getAssets().list("res"); getResources().getAssets().list("/res"); 
getResources().getAssets().list("/res/"); 

nhưng không ai trong số họ làm việc.

Bạn có biết làm cách nào để liệt kê các thư mục phụ của thư mục "res" không?

Cảm ơn bạn trước.

Trả lời

2

Tôi không biết cách trực tiếp để thực hiện việc này, nhưng tôi đã thực hiện một điều tương tự với thư mục nội dung sẽ hoạt động tốt. Tôi sử dụng IntelliJ IDEA và ANT trên Windows cho tòa nhà của mình, nhưng bạn sẽ có thể điều chỉnh điều này cho Eclipse hoặc IDE và * nix/OSX khác.

Trước khi biên soạn, tôi sử dụng một build ANT khía cạnh để chạy một lệnh dir để liệt kê tất cả các file trong thư mục tài sản và ống đầu ra vào một tập tin văn bản:

dir /assets /s /b > /res/raw/filelist.txt 

sau đó tôi đọc filelist.txt thành một hashmap để cung cấp cho tôi cách rất dễ dàng và nhanh chóng để tìm bất kỳ tệp nào (tôi có hàng trăm tệp trong hàng tá thư mục con tài sản và AssetManager quá chết để giải quyết vấn đề đó).

public class AssetsFileManager { 

    private static Map<String, String> files = new HashMap<String, String>(); 

    static{ 

     BufferedReader in = new BufferedReader(new InputStreamReader(this.getResources.openRawResource(R.raw.filelist))) 
     String line = ""; 
     while ((line = in.readLine()) != null) {    
      map.put(line.substring(line.lastIndexOf("\\")+1), line); 
     } 
     in.close(); 
    } 
} 

Lưu ý các dấu chéo ngược thoát, \\

này mang lại cho tôi một bản đồ keyed trên tên file và đường dẫn đầy đủ như giá trị.

Bạn có thể dễ dàng điều chỉnh phương pháp này để lấy danh sách thư mục của mình. Ví dụ. bạn có thể sử dụng dir /ad /b /s

+0

Điều này rất thông minh. Tôi thích điều này. –

0

Tôi không chắc chắn điều này có hiệu quả không, nhưng bạn có thể nhận tất cả các ngôn ngữ có thể với Locale.getAvaliableLocales() và cố gắng lấy một số tài nguyên (ví dụ: app_name) cho từng ngôn ngữ trong danh sách. Here là một cách có thể.

Các vấn đề liên quan