2016-01-20 23 views
5

Tôi có hai tài nguyên chuỗi. Người đầu tiên trong các giá trị \ chính là bằng tiếng Anh và không có một đối số chuỗi:Làm cách nào để định dạng chuỗi cho ngôn ngữ khác với các đối số khác nhau trong Android?

<string name="example">Have a good day!</string> 

Nhưng bằng tiếng Pháp, dưới giá trị-fr, chúng ta có một cụm từ khác nhau với một đối số, như vậy:

<string name="example">Bonne journée M. %1$s!</string> 

Tôi nên sử dụng trình định dạng chuỗi tài nguyên như thế nào? Công trình này, nhưng nó có vẻ không đúng (và nó tạo ra một cảnh báo lint):

textView.setText(getString(R.string.example, name)); 
cảnh báo

Các lint là "StringFormatInvalid" và mô tả là "Định dạng chuỗi 'example' được không phải là một giá trị chuỗi định dạng sao cho nó không được chuyển đến String.format "

+0

Vui lòng chỉnh sửa câu hỏi và hiển thị cảnh báo lint của bạn – TheSunny

+0

@TheSunny Xong! –

+0

Đây là quy tắc lint chính thức: Chuỗi định dạng không hợp lệ Nếu chuỗi chứa ký tự '%', chuỗi có thể là chuỗi định dạng sẽ được chuyển tới String.format từ mã Java để thay thế mỗi lần xuất hiện '%' giá trị cụ thể. Cảnh báo lint này kiểm tra hai vấn đề liên quan: (1) Các chuỗi định dạng không hợp lệ, có nghĩa là String.format sẽ ném các ngoại lệ vào thời gian chạy khi cố gắng sử dụng chuỗi định dạng. (2) Các chuỗi chứa '%' không định dạng chuỗi nhận được thông qua một cuộc gọi String.format. Trong trường hợp này, '%' sẽ cần phải được thoát là '%%'. – TheSunny

Trả lời

3

Không có gì sai với cách tiếp cận của bạn. Trình định dạng hoạt động hoàn hảo ngay cả khi có quá nhiều đối số. Các đối số còn sót lại chỉ bị loại bỏ.

Cảnh báo Lint có để cho biết các lỗi không mong muốn có thể xảy ra trong mã. Nhưng nếu bạn biết những gì bạn đang làm bạn chỉ có thể ngăn chặn cảnh báo bằng cách thêm chú thích @SuppressLint("StringFormatMatches") vào phương thức hoặc lớp kèm theo.

+0

Tôi quyết định thêm cảnh báo ngăn chặn trong tệp XML tiếng anh –

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