2012-07-04 22 views
15

Tôi đã thấy một số ứng dụng và mẫu mã của Google sử dụng thẻ XLIFF để bao bọc các biến. Tôi thấy một số lợi thế lớn trong việc này, đặc biệt là để thay thế các đối số định dạng không mô tả như %1$s.Cải thiện tài nguyên chuỗi Android bằng XLIFF

Thật không may, XLIFF dường như không tích hợp tốt vào ADT. Lấy nguồn chuỗi sau, ví dụ:

<resources 
    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" 
    xmlns:tools="http://schemas.android.com/tools"> 

    <string name="share_with_application"> 
     Share your score of <xliff:g id="score" example="1337">%1$s</xliff:g> 
     with <xliff:g id="application_name" example="Bluetooth">%2$s</xliff:g>! 
    </string> 

</resources> 

Graphical Layout preview

Trong ví dụ trên, các chuỗi được cắt ngắn sau khi <xliff> thẻ đầu tiên. Bạn cũng có thể mong đợi thuộc tính example được sử dụng, kết quả là bản xem trước đồ họa hiển thị:

Chia sẻ điểm số của bạn là 1337 với Bluetooth!

Hiện tại có bất kỳ giá trị nào khi sử dụng thẻ XLIFF trong tài nguyên chuỗi của tôi không?

+0

"Tôi đã nhìn thấy một số ứng dụng và mã Google các mẫu sử dụng thẻ XLIFF để bọc biến "- nếu bạn có ví dụ về một số dự án Android, không tính ứng dụng AOSP, sử dụng XLIFF, hãy chỉ cho chúng tôi biết. Các ứng dụng AOSP có quy trình xây dựng riêng của mình có thể tích hợp XLIFF. Việc sử dụng XLIFF không được ghi nhận là được hỗ trợ bởi Android SDK. – CommonsWare

+0

Cảm ơn sự thấu hiểu. Có vẻ như các mẫu 'strings.xml' trong thư mục SDK chỉ có khai báo vùng tên XLIFF và không thực sự sử dụng các thẻ. Bạn có thể cung cấp thêm thông tin chi tiết về các quy trình xây dựng tùy chỉnh này không? Họ có phải là plugin của Jenkins không? –

+0

"Bạn có thể cung cấp thêm thông tin chi tiết về các quy trình xây dựng tùy chỉnh này không?" - những ứng dụng này được xây dựng như một phần của quá trình tạo chương trình cơ sở đầy đủ (ví dụ: 'bữa trưa'), nhưng tôi chưa bao giờ thực hiện xây dựng phần mềm hoàn chỉnh, hãy để một mình mổ xẻ tất cả chi tiết về những gì nó làm. "Chúng có phải là các plugin của Jenkins không?" -- Tôi rât nghi ngơ điêu đo; ít nhất, bạn không cần Jenkins để xây dựng firmware. – CommonsWare

Trả lời

14

Chúng tôi vừa bổ sung hỗ trợ cho điều này trong Android Studio, cho phiên bản 0.3: https://android-review.googlesource.com/#/c/67724/

+0

Đây có phải là kế hoạch cho Eclipse không? Ngoài ra, bạn có thể xác nhận rằng mục đích của thẻ 'xliff' là đánh dấu văn bản không dịch được hay có mục đích nào khác không? –

+3

Theo tài liệu Android, thẻ xliff: g dùng để đánh dấu văn bản không thể dịch: https://developer.android.com/distribute/googleplay/publish/localizing.html#strings – ZoFreX

+1

URL trên được đề cập bởi @ZoFreX có đã chuyển: https://developer.android.com/guide/topics/resources/localization.html#checklist –

1

Sau khi hiện nay nhận được bàn tay của tôi bẩn với việc xây dựng AOSP từ nguồn, CommonsWare là đúng: đó là quá trình xây dựng là hoàn toàn khác nhau và thực sự nhiều ứng dụng AOSP chứa các thẻ XLIFF. Nó quá xấu, điều này không tích hợp với ADT, nhưng nó là như nó được.

6

Chỉ cần được rõ ràng, việc sử dụng thẻ XLIFF tài nguyên chuỗi Android được ghi chép lại đầy đủ tại

https://developer.android.com/distribute/tools/localization-checklist.html#manage-strings

Các chuỗi như vậy hoạt động tốt ngay cả trong các bản dựng Eclipse (sự hỗ trợ là trong công cụ aapt xây dựng các ứng dụng). Tuy nhiên, như minh họa trong câu hỏi, các công cụ bố cục đồ họa chứa trong ADT không thực hiện bất kỳ khoản phụ cấp nào cho thẻ xliff, chỉ cắt xén chuỗi sau chuỗi con được đánh dấu đầu tiên như vậy.

Các công cụ đồ họa trong Android Studio làm đối phó tốt với chuỗi như vậy, hiểu biết về, và làm cho việc sử dụng đánh dấu xliff.

Tôi thực sự thấy rằng toàn bộ <xliff:g> là khá dài dòng trong mã nguồn của tôi, vì vậy tôi điều chỉnh tờ khai namepsace cho phép tôi sử dụng chỉ <x:g> như sau:

<resources xmlns:x="urn:oasis:names:tc:xliff:document:1.2"> 

    <string name="greeting">Hello <x:g id="name">%1$s</x:g>!</string> 

</resources> 
Các vấn đề liên quan