2012-04-12 35 views
5

Có thể tham khảo một chuỗi trong strings.xmlchuỗi tham khảo Android trong string.xml

Ví dụ:

<string name="application_name">@string/first_name Browser</string> 
<string name="first_name">Chrome</string> 

đâu tùy thuộc vào yêu cầu, tôi có thể chuyển đổi các giá trị của first_name để "Chrome" , "Firefox" hoặc "Opera".

+0

thể trùng lặp của [người ta có thể kết hợp dây nguồn android thành chuỗi mới?] (Http://stackoverflow.com/questions/3613722/can-one-combine-android -resource-strings-in-new-strings) –

+0

có thể trùng lặp của [Tham chiếu một chuỗi từ một chuỗi khác trong strings.xml?] (http://stackoverflow.com/questions/4746058/reference-one-string-from-another -string-in-strings-xml) – sschuberth

Trả lời

16

Bạn có thể cung cấp cho các tài liệu tham khảo tài nguyên chuỗi, nhưng giới hạn như sau

<string name="first_name">Chrome</string> 
<string name="application_name">@string/first_name</string> // gives "Chrome" 
<string name="application_name">Chrome @string/first_name</string> // gives "Chrome @string/first_name" 
<string name="application_name">@string/first_name Chrome </string> // gives error 

Nếu nội dung bắt đầu với "@" thì Android coi đây là một chuỗi tham chiếu, xem trường hợp cuối cùng mà đưa ra một lỗi vì Android các công cụ lấy @ và chuỗi tiếp theo là chuỗi tham chiếu của chuỗi, nó sẽ cố gắng tìm một tài nguyên có tên "@ string/first_name Chrome" không tồn tại.

Bạn có thể sử dụng Chuỗi Format để tự động gán tiểu chuỗi như <string name="application_name">%1$s browser</string>

sử dụng

String text = String.format(res.getString(R.string.application_name), "Chrome"); 
+0

Có thể định dạng chuỗi bằng cách sử dụng - 'res.getString (R.string.application_name," Chrome ")' –

2

Các Strings trong strings.xml là cố định và không thể thay đổi tại thời gian chạy. Bạn sẽ phải xác định một chuỗi cho mỗi trường hợp và thực hiện chuyển đổi trong mã.

String name; 

if (/* browser is Chrome*/) { 
    name = getString(R.string.first_name_chrome); 
} else if (/* browser is Firefox */) { 
    name = getString(R.string.first_name_firefox); 
} 

Tuy nhiên, bạn có thể làm cho ứng dụng chọn đúng chuỗi cho các ngôn ngữ khác nhau một cách tự động. Điều này có thể được thực hiện bằng cách đặt các tệp chuỗi trong các thư mục được bản địa hóa (các giá trị-en, các giá trị-fr, các giá trị-pl, v.v.).

Bạn có thể đọc thêm về nội địa hóa tại http://www.icanlocalize.com/site/tutorials/android-application-localization-tutorial/

+0

Đây có phải là lỗi hay chính xác cho việc sử dụng của bạn mà bạn sử dụng "R. chuỗi "thay vì" R.string "? – RenniePet