2013-04-25 19 views
5

Tôi có một ứng dụng dịch trong 3 ngôn ngữ: Anh, Đức, Ba LanLàm cách nào để tránh sự cố do thiếu các mục nhập chuỗi?

Vì vậy, tôi có ba thư mục cho các ngôn ngữ trong dự án:

values 
strings.xml 

values-en 
strings.xml 

values-de 
strings.xml 

values-pl 
strings.xml 

tôi đã nhận ra rằng nếu tôi đặt tất cả các chuỗi vào thư mục giá trị và có một số chuỗi bị thiếu trong phiên bản tiếng Ba Lan mà ứng dụng gặp sự cố khi truy cập các chuỗi bị thiếu trong phiên bản tiếng Ba Lan.

Tôi đã mong đợi rằng hệ thống chỉ nhận được chuỗi từ thư mục giá trị mặc định nếu nó không tìm thấy nó trong thư mục values-pl.

Có cách nào để nắm bắt các lỗi treo chuỗi có khả năng bị thiếu không? EVen nếu tôi có thể nhận được một cảnh báo trong trình biên dịch rằng chuỗi trong bất kỳ ngôn ngữ là mất tích sẽ được OK?

EDIT VÀ BỔ SUNG

Trong thực tế chuỗi khác đã mất tích trong mặc định quá .... do đó, nhờ câu trả lời/bình luận!

Nhưng bây giờ tôi cũng đã thử nghiệm trường hợp có một chuỗi chỉ đơn giản là thiếu trong tệp strings.xml mặc định chỉ NHƯNG hiện diện trong tất cả các tệp khác. Tôi không nhận được bất kỳ cảnh báo hoặc bất cứ điều gì khác. Vì vậy, trong trường hợp này nếu TẤT CẢ các chuỗi có mặt trong de, en, pl nhưng một là thiếu trong mặc định, sau đó ứng dụng bị treo ở Trung Quốc ví dụ (tôi hiểu tất nhiên vì mặc định là mất tích).

NHƯNG những gì làm phiền tôi là tôi không tìm thấy bất kỳ cách nào để kiểm tra tính đầy đủ của tất cả các chuỗi được tham chiếu trong mã. Đây là cách tôi tiếp cận chuỗi mất tích:

context.getString(R.string.MYTRING_abc), 
+0

Từ các expiriens của tôi nếu thiếu chuỗi dự án không biên dịch. Tôi đang sử dụng nhật thực juno. – NickF

+0

Nếu bạn kiểm tra ứng dụng của mình, bằng mọi ngôn ngữ có sẵn, bạn sẽ không phải đặt câu hỏi này. Đối với tôi, điều đó không có lý, tại sao bạn không chắc chắn rằng các chuỗi có sẵn trước khi xuất bản ứng dụng của bạn. Không phải tất cả các trường hợp ngoại lệ nên được nắm bắt, chúng phải được xử lý trước khi chúng có thể xảy ra. – Darwind

+1

"Tôi có một ứng dụng được dịch sang 3 ngôn ngữ: tiếng Anh, tiếng Đức, tiếng Ba Lan" - không, bạn có ứng dụng của mình được dịch sang bốn ngôn ngữ: tiếng Anh, tiếng Đức, tiếng Ba Lan và bất kỳ ngôn ngữ nào trong thư mục 'res/values ​​/' của bạn. Nếu bạn thực sự chỉ có ứng dụng của mình được dịch sang ba ngôn ngữ, thì một trong những ngôn ngữ đó cần phải chuyển sang 'res/values ​​/'. Bạn muốn 'res/values ​​/' có giá trị mặc định cho mọi tài nguyên chuỗi, trong bất cứ thứ gì bạn muốn xem xét ngôn ngữ mặc định của mình. – CommonsWare

Trả lời

3

Trong menu nhật thực Window --> Properties --> Android --> Lint Error Checking trong phần Correctness:Messages thiết MissingTranslation để Lỗi trong Severity hộp. Khi biên dịch trong các giá trị mặc định của bạn string.xml, mỗi chuỗi chưa được dịch sẽ được đánh dấu. Hầu hết thời gian sau khi xây dựng, bạn phải nhấp vào refresh icon trong cửa sổ Link Warnings (bên cạnh Outline window) để hiển thị các lỗi này.
Nếu có lỗi sau khi sửa chúng, bạn phải dọn dẹp dự án của mình, nếu không Eclipse sẽ không xây dựng và vẫn hiển thị các lỗi này.

+0

cảm ơn tôi đã kiểm tra rằng - mỏ được đặt thành số – user387184

2

Tôi đã dự kiến ​​rằng hệ thống sẽ nhận được chuỗi từ thư mục giá trị mặc định nếu nó không tìm thấy nó trong thư mục values-pl.

Nó hoạt động theo cách đó cho <string> s, nhưng không cho các thành phần của <string-array> s. Nếu một trong các bản dịch có số <string-array> mà không có số phần tử chính xác, bạn sẽ gặp sự cố nếu ứng dụng tìm cách truy cập phần tử bị thiếu. Giải pháp của tôi trong vài năm qua là lưu trữ mọi chuỗi ký tự trong một tệp XML không được dịch, tham chiếu đến các chuỗi có thể dịch được.

res/values ​​/ misc.xml:

<?xml version="1.0" encoding="utf-8"?> 
<!-- Resources that are neither styles nor strings to be translated. --> 
<resources> 
    <string-array name="notification_line_content_entries"> 
    <item>@string/time_remaining</item> 
    <item>@string/time_since_status_change</item> 
    <item>@string/vital_signs</item> 
    </string-array> 
</resources> 

Bằng cách này nếu một trong các chuỗi độc lập không được dịch, mảng vẫn còn hiệu lực và bạn rơi lại bản dịch mặc định cho rằng đặc biệt giá trị.

Tất nhiên khả năng khác là, như được đề xuất trong nhận xét, bạn không có bản dịch mặc định cho mọi chuỗi trong res/values/.

+0

gây tử vong, đó chỉ là chuỗi bình thường và nó bị thiếu trong thư mục giá trị, nhưng không có cảnh báo hoặc bất kỳ điều gì khác! – user387184

0

Trong Android Studio:

Settings -> Editor -> Inspections -> (search for or find) Incomplete translation 

Set để info hoặc warning. Error ngăn không cho ứng dụng được tạo khi bạn nhấn create signed APK. Theo kinh nghiệm của riêng tôi, tôi chỉ gặp lỗi này khi tạo một bản dựng (không gỡ lỗi thông qua gỡ lỗi USB, có nghĩa là khi nó được xây dựng đã ký) nhưng thay đổi bản dịch chưa hoàn thành thành warning (vì vậy tôi nhận được thông báo là không) đã hoàn thành, nhưng nó không được bỏ qua trong trường hợp tôi chỉ quên) (hoặc info cho rằng vấn đề) cho phép ứng dụng được xây dựng và nó hoạt động giống như trong debug nơi bản dịch không đầy đủ đi đến giá trị mặc định.

Nhưng nếu bạn gặp phải lỗi khi gỡ lỗi, điều này sẽ vẫn hoạt động và ngăn chặn sự cố trong quá trình tạo APK

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