248

Câu hỏi này đã có câu trả lời ở đây:

Trong ứng dụng Android của tôi, tôi sẽ triển khai chuỗi của mình với quốc tế hóa. Tôi có một vấn đề với ngữ pháp và cách xây dựng câu trong các ngôn ngữ khác nhau.

Ví dụ:

"5 phút trước" - Tiếng Anh

"vor 5 Minuten" - tiếng Đức

Tôi có thể làm một cái gì đó như sau trong String.xml không?

<string name="timeFormat">{0} minutes ago</string>

Và rồi một số phép thuật như

getString(R.id.timeFormat, dynamicTimeValue)

Hành vi này sẽ giải quyết vấn đề khác với các đơn đặt hàng từ khác nhau là tốt.

|
324

Có, chỉ cần định dạng chuỗi của bạn theo String.format()cách tiêu chuẩn .

Xem phương pháp Context.getString(int, Object...)tài liệu Android hoặc Java Formatter .

Trong trường hợp của bạn, định nghĩa chuỗi sẽ là:

<string name="timeFormat">%1$d minutes ago</string>
|
258

Nếu bạn cần hai biến trong XML, bạn có thể sử dụng:

%1$d text... %2$dhoặc %1$s text... %2$scho các biến chuỗi.

Thí dụ:

chuỗi DOM

<string name="notyet">Website %1$s isn\'t yet available, I\'m working on it, please wait %2$s more days</string>

Activity.java

String site = "mywebsite";
String days = "11";

//Toast example
String notyet = getString(R.string.notyet, site, days);
Toast.makeText(getApplicationContext(), notyet, Toast.LENGTH_LONG).show();

PS: Đọc bình luận dưới đây của Flaxie

|
  • 1

    Thứ tự không quan trọng như bạn nói. Các số trong chuỗi thực sự là thứ tự của tham số. Tùy thuộc vào ngôn ngữ, bạn có thể có các số theo thứ tự khác nhau.

    – Tạ Vương Gia 08:10:47 16/01/2015
20

Nếu bạn cần định dạng chuỗi của mình bằng String.format (Chuỗi, Đối tượng ...), thì bạn có thể làm như vậy bằng cách đặt đối số định dạng của mình vào tài nguyên chuỗi. Ví dụ: với tài nguyên sau:

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>

Trong ví dụ này, chuỗi định dạng có hai đối số:% 1 $ s là một chuỗi và% 2 $ d là số thập phân. Bạn có thể định dạng chuỗi với các đối số từ ứng dụng của bạn như thế này:

Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);

Nếu bạn muốn xem thêm tại: http://developer.android.com/intl/pt-br/guide/topics/resource/opes-resource.html#FormattedAndStyling

|
12

Lưu ý rằng đối với ứng dụng cụ thể này có chức năng thư viện chuẩn , android.text.format.DateUtils.getRelativeTimeSpanString().

|
  • 1

    Hàm lib này, mặc dù là một ý tưởng tuyệt vời, bị vấy bẩn bởi các lỗi ngữ pháp và dịch sai trong các ngôn ngữ khác ... tiếng Tây Ban Nha là một trong số đó, tôi thấy thật nực cười. Tôi cảm thấy nhẹ nhõm khi bắt gặp nó và sau đó tức giận khi tôi thấy rằng đó không phải là tất cả các phép thuật mà nó phải có.

    – Đặng Lan Chi 23:33:29 11/04/2014
  • 1

    Vẫn là một ý tưởng tốt để sử dụng nói chung, có lẽ chỉ ghi đè cho các trường hợp cụ thể. Bằng cách đó, bạn nhận được các cải tiến miễn phí về cập nhật hệ thống (và nếu có lỗi, có lẽ bạn nên tiếp tục và báo cáo chúng).

    – Huynh Ngoan 20:24:31 25/04/2014

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.