Android: Tài nguyên chuỗi (string resource)

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Một tài nguyên chuỗi cung cấp các chuỗi văn bản cho ứng dụng của bạn với kiểu dáng và định dạng văn bản tùy chọn. Có ba loại tài nguyên có thể cung cấp cho ứng dụng của bạn các chuỗi:

String

Tài nguyên XML cung cấp một chuỗi đơn.

String Array

Tài nguyên XML cung cấp một chuỗi các chuỗi.

Quantity String

Tài nguyên XML mang các chuỗi khác nhau.

Tất cả các chuỗi đều có khả năng áp dụng một số kiểu đánh dấu và đối số định kiểu.

String

Một chuỗi đơn có thể được tham chiếu từ ứng dụng hoặc từ các tệp tài nguyên khác (chẳng hạn như bố cục XML).

Lưu ý: Chuỗi là một tài nguyên đơn giản được tham chiếu bằng cách sử dụng giá trị được cung cấp trong namethuộc tính (không phải là tên của tệp XML). Vì vậy, bạn có thể kết hợp các tài nguyên chuỗi với các tài nguyên đơn giản khác trong một tệp XML, dưới một <resources>phần tử.

file location:

res/values/filename.xml
Tên tệp là tùy ý. Thuộc tính name của phần tử <string> được sử dụng làm ID của tài nguyên.

compiled resource datatype:

Con trỏ tài nguyên đến một String.

resource reference:

Trong Java: R.string.string_name

 Trong XML: @string/string_name

cú pháp:

<? xml version = "1.0" encoding = "utf-8" ?>
    name = " string_name "
    > text_string </ string>
</ resources>

Phần tử:

<resources>

Phần tử này là bắt buộc.

Đây phải là nút gốc.

Phần tử này không có thuộc tính.

<string>

Một chuỗi, có thể bao gồm các thẻ tạo kiểu. Lưu ý rằng bạn phải bỏ dấu nháy đơn và kép.

Các thuộc tính:

name

String. Đây là tên cho chuỗi, tên này được sử dụng làm ID tài nguyên.

Ví dụ:

Tệp XML được lưu tại res/values/strings.xml:
<? xml version = "1.0" encoding = "utf-8" ?>
<resources>
    <string name = "hello" >Hello!</ string>
</ resources>

Bố cục XML này áp dụng mỗi chuỗi cho một View:

<TextView
    android: layout_width = "fill_parent"
    android: layout_height = "wrap_content"
    android: text = "@ string / hello" />

Mã ứng dụng này sẽ truy xuất một chuỗi:

String string = getString(R.string.hello);

Bạn có thể sử dụng getString(int)hoặc getText(int) để lấy một chuỗi. getText(int) giữ lại bất kỳ dạng văn bản nào được áp dụng cho chuỗi.

String array

Một mảng chuỗi có thể được tham chiếu từ ứng dụng.

Chú ý: Mảng chuỗi là một tài nguyên đơn giản được tham chiếu bằng cách sử dụng giá trị được cung cấp trong namethuộc tính (không phải là tên của tệp XML). Như vậy, bạn có thể kết hợp các tài nguyên mảng chuỗi với các tài nguyên đơn giản khác trong một tệp XML, dưới một <resources>phần tử.

Vị trí tập tin:

res/values/filename.xml
Tên tệp là tùy ý. Thuộc tính name của phần tử <string-array> được sử dụng làm ID tài nguyên.

Kiểu dữ liệu tài nguyên biên dịch:

Con trỏ tài nguyên đến một mảng của chuỗi.

Tài nguyên tham khảo:

Trong Java: R.array.string_array_name

Cú pháp:

<? xml version = "1.0" encoding = "utf-8" ?>
< resources >
    < string-array
        name = " string_array_name " >
        < item >
            text_string </ item>
    </ string-array>
</ resources>

Các phần tử:

<resources>

Bắt buộc. Đây phải là nút gốc.

Phần tử này không có thuộc tính.

<string-array>

Xác định một mảng chuỗi. Chứa một hoặc nhiều phần tử <item>.

Thuộc tính: name

Thuộc tính này có kiểu String dùng  để đặt tên cho mảng. Tên này được sử dụng làm ID tài nguyên để tham chiếu mảng.

<item>

Một chuỗi, có thể bao gồm các thẻ tạo kiểu. Giá trị có thể là một tham chiếu đến một tài nguyên chuỗi khác. Phải là con của phần tử <string-array>. Lưu ý rằng bạn phải bỏ qua dấu nháy đơn và kép.

Không có thuộc tính.

Ví dụ:

Tệp XML được lưu tại res/values/strings.xml:
<? xml version = "1.0" encoding = "utf-8" ?> <resources> <string-array name = "planets_array" > <item> Mercury </ item> <item> Venus </ item> <item> Earth </ mục> <item> Sao Hỏa </ item> </string-array> </ resources>

Mã ứng dụng này lấy một mảng chuỗi:

Resources res = getResources();
String[] planets = res.getStringArray(R.array.planets_array);

Quantity strings (plurals)

Các ngôn ngữ khác nhau có các quy tắc khác nhau cho thỏa thuận ngữ pháp với số lượng. Trong tiếng Anh, ví dụ, số lượng 1 là một trường hợp đặc biệt. Ta viết "1 cuốn sách", nhưng đối với bất kỳ số lượng nào khác, chúng ta sẽ viết "n sách". Sự khác biệt này giữa số ít và số nhiều là rất phổ biến, nhưng các ngôn ngữ khác tạo ra sự phân biệt tốt hơn. Các tập hợp đầy đủ hỗ trợ bởi Android là zeroonetwofewmany, và other.

Các quy tắc để quyết định trường hợp nào sử dụng cho một ngôn ngữ và số lượng nhất định có thể rất phức tạp, vì vậy Android cung cấp cho bạn các phương pháp như  getQuantityString() để chọn tài nguyên thích hợp cho bạn.

Mặc dù trong lịch sử gọi là "chuỗi số lượng" (và vẫn được gọi như vậy trong API), chuỗi số lượng chỉ nên được sử dụng cho số nhiều. Nó sẽ là một sai lầm khi sử dụng chuỗi số lượng để thực hiện một cái gì đó như "Hộp thư đến" của Gmail so với "Hộp thư đến (12)" khi có thư chưa đọc, chẳng hạn. Có vẻ thuận tiện khi sử dụng chuỗi số thay vì điều kiện if, nhưng điều quan trọng cần lưu ý là một số ngôn ngữ (chẳng hạn như tiếng Trung) không tạo ra những khác biệt ngữ pháp, vì vậy bạn sẽ luôn nhận được chuỗi other.

Việc lựa chọn chuỗi ký tự nào được sử dụng chỉ được thực hiện dựa trên sự cần thiết về mặt ngữ pháp . Trong tiếng Anh, chuỗi zerobị bỏ qua ngay cả khi số lượng là 0, bởi vì 0 không khác biệt về mặt ngữ pháp từ 2 hoặc bất kỳ số nào khác ngoại trừ 1 ("sách không", "một cuốn sách", "hai sách", v.v. ). Ngược lại, bằng tiếng Hàn chỉ các otherchuỗi được từng sử dụng.

Đừng bị lừa dối bởi thực tế là two có vẻ như nó chỉ có thể áp dụng cho số lượng 2: một ngôn ngữ có thể yêu cầu 2, 12, 102 (và vân vân) đều được đối xử như nhau nhưng khác với số lượng khác . Dựa vào dịch giả của bạn để biết những gì phân biệt ngôn ngữ của họ thực sự khẳng định.

Thường có thể tránh các chuỗi số lượng bằng cách sử dụng các công thức trung hòa số lượng như "Sách: 1". Điều này làm cho cuộc sống của bạn và cuộc sống của người dịch trở nên dễ dàng hơn, nếu đó là một phong cách chấp nhận được cho ứng dụng của bạn.

Chú ý: Bộ sưu tập số nhiều là một tài nguyên đơn giản được tham chiếu bằng cách sử dụng giá trị được cung cấp trong namethuộc tính (không phải là tên của tệp XML). Như vậy, bạn có thể kết hợp các tài nguyên số nhiều với các tài nguyên đơn giản khác trong một tệp XML, dưới một <resources>phần tử.

Vị trí tập tin:

res/values/filename.xml
Tên tệp là tùy ý. Thuộc tính name của <plurals> được sử dụng làm ID tài nguyên.

Tài nguyên tham khảo:

Trong Java: R.plurals.plural_name

Cú pháp:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <plurals
        name="plural_name">
        <item
            quantity=["zero" | "one" | "two" | "few" | "many" | "other"]
            >text_string</item>
    </plurals>
</resources>

Phần tử:

<resources>

Bắt buộc. Đây phải là nút gốc.

Không có thuộc tính.

<plurals>

Một tập hợp các chuỗi, trong đó, một chuỗi được cung cấp tùy thuộc vào số lượng của một cái gì đó. Chứa một hoặc nhiều <item>phần tử.

Thuộc tính name:

Kiểu chuỗi, dùng làm tên cho cặp chuỗi. Tên này được sử dụng làm ID tài nguyên.

<item>

Một chuỗi số nhiều hoặc số ít. Giá trị có thể là một tham chiếu đến một tài nguyên chuỗi khác. Phải là con của một <plurals>phần tử. Cẩn thận rằng bạn phải thoát khỏi dấu nháy đơn và dấu ngoặc kép.

Thuộc tính quantity:

Dạng từ khóa. Nó cho biết khi nào chuỗi nên được sử dụng. Các giá trị hợp lệ, với các ví dụ không đầy đủ trong dấu ngoặc đơn:
Giá trị Miêu tả
zero Khi ngôn ngữ yêu cầu xử lý đặc biệt số 0 (như tiếng Ả Rập).
one Khi ngôn ngữ yêu cầu xử lý đặc biệt các con số như một (như với số 1 bằng tiếng Anh và hầu hết các ngôn ngữ khác; tiếng Nga, bất kỳ số nào kết thúc bằng 1 nhưng không kết thúc bằng 11 là trong lớp này).
two Khi ngôn ngữ yêu cầu xử lý đặc biệt các số như hai (như với 2 trong tiếng xứ Wales, hoặc 102 bằng tiếng Slovenia).
few Khi ngôn ngữ yêu cầu xử lý đặc biệt các số "nhỏ" (như với 2, 3 và 4 bằng tiếng Séc; hoặc số kết thúc bằng 2, 3 hoặc 4 nhưng không phải là 12, 13 hoặc 14 bằng tiếng Ba Lan).
many Khi ngôn ngữ yêu cầu xử lý đặc biệt các số "lớn" (như với các con số kết thúc bằng 11-99 bằng tiếng Malta).
other Khi ngôn ngữ không yêu cầu xử lý đặc biệt số lượng nhất định (như với tất cả các số bằng tiếng Trung, hoặc 42 bằng tiếng Anh).

Ví dụ:

File XML được lưu tại res/values/strings.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <plurals name="numberOfSongsAvailable">
        <!-- Là nhà phát triển, bạn nên luôn cung cấp các chuỗi "one" và "othe". Trình dịch của bạn sẽ biết những chuỗi nào thực sự cần thiết cho ngôn ngữ. Luôn bao gồm %d đối với "one" vì bộ dịch sẽ cần sử dụng %d cho các ngôn ngữ trong đó "one" không có nghĩa là 1 (như đã giải thích ở trên). -->
        <item quantity="one">%d song found.</item>
        <item quantity="other">%d songs found.</item>
    </plurals>
</resources>

        <item quantity = "other" > % d bài hát được tìm thấy. </ item> </ plurals> </ resources>   

Tệp XML được lưu tại res/values-pl/strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <plurals name="numberOfSongsAvailable">
        <item quantity="one">Znaleziono %d piosenkę.</item>
        <item quantity="few">Znaleziono %d piosenki.</item>
        <item quantity="other">Znaleziono %d piosenek.</item>
    </plurals>
</resources>

Mã Java:

int count = getNumberOfsongsAvailable();
Resources res = getResources();
String songsFound = res.getQuantityString(R.plurals.numberOfSongsAvailable, count, count);

Khi sử dụng phương thức getQuantityString(), bạn cần phải truyền biến counthai lần nếu chuỗi của bạn bao gồm định dạng chuỗi với một số. Ví dụ, đối với chuỗi %d songs found, tham số count đầu tiên sẽ chọn.

» Tiếp: Sự kiện onClick trong Android
« Trước: Tạo Custom View
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!