Không thể đặt ngôn ngữ mặc định trong Android Studio


8

Tôi đang nhận được cảnh báo trong Android Studio về các chuỗi chưa được dịch - nó đang nói với tôi rằng chúng chưa được dịch sang tiếng Anh. Điều này dường như là do tôi có một thư mục tài nguyên "en-rGB". Nhưng tôi đã cố làm theo các hướng dẫn trong lint để chỉ định ngôn ngữ mặc định, nhưng điều này không hiệu quả.

Tôi có các tệp String.xml sau đây:

values/strings.xml:

<resources xmlns:tools="http://schemas.android.com/tools"
    tools:locale="en">

    <string name="string1">Howdy</string>
    <string name="string2">Howdy</string>
</resources>

values-en-rGB/strings.xml:

<resources>

    <string name="string1">Hello</string>
</resources>

values-fr/strings.xml:

<resources>

    <string name="string1">Bonjour</string>
    <string name="string2">Bonjour</string>
</resources>

values-fr-rCA/strings.xml:

<resources>

    <string name="string2">Bonjour</string>
</resources>

Kết quả dự kiến: Không nên có cảnh báo, cả hai chuỗi được dịch sang cả tiếng Anh và tiếng Pháp

Kết quả thực tế: Lint sẽ cảnh báo về chuỗi2, nói rằng nó không được dịch sang tiếng Anh.

Lưu ý, tôi đã bao gồm fr-rCA để cho thấy rằng đó không phải là một khu vực. Thật là hạnh phúc khi nó được dịch sang tiếng Pháp "không đăng ký", nó cũng không cần phải dịch sang tiếng Canada tiếng Pháp. Trong trường hợp này, nó sẽ không cảnh báo về chuỗi1, mặc dù nó không được dịch sang tiếng Canada, vì nó đã được dịch sang tiếng Pháp.

Tôi không thể thay đổi thư mục tài nguyên chính thành tiếng Anh ( values-en), vì điều đó sẽ dẫn đến lỗi không có tài nguyên mặc định. Cái nào đúng.

Tôi không muốn loại bỏ cảnh báo nói chung, vì tôi đang dự định thêm các ngôn ngữ khác và tôi muốn cảnh báo xuất hiện cho các chuỗi không được dịch sang các ngôn ngữ khác mà tôi đã đưa vào.

Những gì tôi đang theo là cách chính xác để thông báo cho ngôn ngữ mặc định. Tôi đã thực hiện theo hướng dẫn cho cảnh báo "Bản dịch chưa hoàn chỉnh":

Bạn có thể cho lint (và các công cụ khác) ngôn ngữ nào là ngôn ngữ mặc định trong thư mục res / value / của bạn bằng cách chỉ định các công cụ: locale = "ngôn ngữ mã hóa" cho phần tử gốc trong tệp tài nguyên của bạn. (Tiền tố công cụ đề cập đến khai báo không gian tên http://schemas.android.com/tools .)

Nhưng điều này dường như không hoạt động. Tôi đang làm sai, hay đây là một vấn đề với lint?


Thật kỳ lạ khi bạn có 2 chuỗi mặc định nhưng chỉ một trong số mỗi chuỗi được dịch sang ngôn ngữ khu vực khác. Tôi đoán lỗi được đưa ra bằng cách không có chuỗi2 trong các giá trị en-rGB của bạn được thêm vào.
C.Schone

1
Tôi thứ hai những gì @ C.Schone nói. Chỉ cần sao chép chuỗi2 mặc định sang en-rGB vì chúng sẽ kết thúc giống nhau, điều này sẽ khiến cảnh báo của bạn biến mất. Cách tốt nhất tôi muốn nói về bản dịch là tất cả strings.xmlcác tệp nên có tất cả các mục làm mặc định values/strings.xml, bất kể giá trị có cần dịch hay không.
ahasbini

1
@ahasbini Chỉ cần sao chép chuỗi2 mặc định sang en-rGB vì chúng sẽ kết thúc giống nhau ở đây vì nó chỉ có 1 chuỗi và chỉ có 1 ngôn ngữ khác cần nó. Hãy tưởng tượng 100 chuỗi và 20 ngôn ngữ
Tim

imho, tôi vẫn sẽ làm điều đó bằng cách sử dụng một công cụ khác. Vì cuối cùng tất cả các mục cần tồn tại trong tất cả các tệp chuỗi, tôi sắp xếp các mục theo tên (không phải giá trị) trong tất cả các tệp và sau đó với một công cụ tìm khác biệt, có cả tệp mặc định và tệp ngôn ngữ cụ thể mở để tìm các mục bị thiếu và sao chép chúng với các giá trị mặc định. Người ta cũng có thể viết một đoạn mã nhỏ để làm như vậy nhưng tôi sẽ coi đây chỉ là một lần duy nhất và do đó tôi sẽ làm điều đó bằng cách sử dụng một công cụ tìm khác biệt như WinMerge hoặc những người khác
ahasbini 28/12/19

tất cả các mục cần phải tồn tại trong tất cả các tệp chuỗi, chỉ có tệp mặc định cần chứa tất cả các chuỗi
Tim

Câu trả lời:


6

Đó là một lỗi: https://issuetracker.google.com/issues/142590628

Tôi có một hotfix cho bạn: Tự động sao chép values/strings.xmlvào values-enthư mục

1. Tạo values-enthư mục

2. Dán nó vàoapp/build.gradle

task copyEnResource {
    copy {
        from ('src/main/res/values/strings.xml')
        into ('src/main/res/values-en/')
    }
}

preBuild.dependsOn copyEnResource

Bản giới thiệu:

Dịch các vấn đề phòng thu Android


Cảm ơn, tôi sẽ cho nó đi. Hơi khó hiểu một chút nhưng miễn là nó tự động, tôi đoán nó không phải là vấn đề bảo trì quá nhiều
richjhart

Cuối cùng cũng phải
loay hoay
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.