Cách triển khai bản địa hóa trong Swift UI


10

Ai có thể giúp tôi? Tôi không thể tìm thấy bất kỳ mô tả nào về bản địa hóa trong Swift UI. Bất cứ ai có thể xin vui lòng cho lời khuyên hoặc tốt hơn một ví dụ về làm thế nào để bản địa hóa ví dụ Text()?

Câu trả lời:


15

Khi bạn xem tài liệu về Văn bản, bạn có thể thấy rằng nó đưa LocalizedStringKey chứ không phải là Chuỗi vào trình khởi tạo của nó:

init(_ key: LocalizedStringKey, tableName: String? = nil, bundle: Bundle? = nil, comment: StaticString? = nil)

Nó làm cho nội địa hóa rất đơn giản. Tât cả nhưng điêu bạn phải lam la:

  • tạo một tệp mới của loại Chuỗi tệp, gọi nó là Bản địa hóa
  • chọn tệp mới và chuyển đến Trình kiểm tra tệp trong bảng điều khiển bên phải và nhấp vào Bản địa hóa ...
  • đi tới tệp dự án của bạn vào phần Bản địa hóa và thêm ngôn ngữ khác vào danh sách - Xcode sẽ tạo các tệp bản địa hóa cho bạn

Khi bạn chọn Localizable.strings, bạn sẽ thấy rằng nó chứa các tệp cho ngôn ngữ gốc và ngôn ngữ bạn vừa thêm. Đó là nơi bạn đặt bản dịch của mình, tức là khóa - cặp văn bản được bản địa hóa.

Nếu bạn có một văn bản như thế này là ứng dụng của bạn:

Text("Hello World!")

Bây giờ bạn phải thêm vào Localizable.strings bản dịch của bạn:

cho ngôn ngữ cơ sở của bạn:

"Hello World!" = "Hello World!";

và cho ngôn ngữ thứ hai của bạn (trong trường hợp này là tiếng Đức):

"Hello World!" = "Hallo Welt!";

Để xem bản xem trước của bạn được bản địa hóa, bạn có thể định nghĩa chúng như thế này:

struct ContentViewView_Previews: PreviewProvider {

    static var previews: some View {
        ForEach(["en", "de"], id: \.self) { id in
            ContentView()
                .environment(\.locale, .init(identifier: id))
        }
    }
}

Cảm ơn, nó rất hữu ích! Nhưng tôi đã có một số vấn đề vì đó là một số ngôn ngữ đã được thêm vào.
Oleh H

Tôi đã làm theo các hướng dẫn này để thư và nó không hoạt động. Tôi đang chạy iOS 10.15.1 Beta và Xcode 11.1. Mọi lời khuyên vui vẻ chấp nhận. Bây giờ tôi sẽ giả sử một trục trặc trong phần mềm beta và không mất thêm thời gian cho việc này
Mẹ của Joseph Beuys

Chính xác thì vấn đề là gì?
LuLuGaGa

1
Tôi tìm thấy vấn đề @LuLuGaGa. Nó diễn ra rằng tôi đã không làm theo hướng dẫn của bức thư, như tôi đã nói. Tập tin chuỗi nội địa hóa của tôi là trong một thư mục con. Đặt nó ở cấp độ dự án và nó hoạt động tốt
Joseph Beuys 'Mum

1
Tôi cũng đã phát hiện ra (tôi nghĩ) rằng việc gọi các chuỗi tệp bất kỳ thứ gì ngoài Localizable có nghĩa là nó sẽ không hoạt động
Joseph Beuys 'Mum

3

Đối với tệp UI nhanh, bạn chỉ cần chèn khóa chuỗi từ tệp .strings bản địa hóa

nhập SwiftUI

struct ContentView: View {
    var body: some View {
        VStack {
            Text("selectLanguage")
            Text("languagesList")
        }



    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
            .environment(\.locale, .init(identifier: "en"))
    }
}

và đây là một ví dụ từ tập tin .strings

"selectLanguage" = "Select language";
"languagesList" = "Languages list";

kết quả là đây


0

Để bản địa hóa ứng dụng của bạn, bạn cần:

  1. Sử dụng các yếu tố SwiftUI như: Văn bản ("Đẹp") . Nice trở thành chìa khóa trong Localizable.strings.
  2. Trong trường hợp văn bản không có trong phần tử SwiftUI cần sử dụng NSLocalizedString .
  3. Chọn bạn mục tiêu ứng dụng.
  4. Xuất bản địa hóa: Chỉnh sửa -> Xuất để bản địa hóa ...
  5. Cung cấp các tập tin xuất khẩu cho người dịch.
  6. Nhập bản dịch: Chỉnh sửa -> Nhập bản địa hóa ...

0

Để sử dụng Localazable trong SwiftUI, bạn có thể thực hiện theo cách này:

nhập SwiftUI để sử dụng LocalizedStringKey trong tệp của bạn

//MARK: - File where you enum your keys to your Localized file
enum ButtonName: LocalizedStringKey {
case submit
case cancel
}

//MARK: - Your Localized file where are your translation
"submit" = "Submit is pressed";
"cancel" = "Cancel";

//MARK: - In your code
let submitButtonName = ButtonName.submit.rawValue
let cancelButtonName = ButtonName.cancel.rawValue

VStack {
Text(submitButtonName)
Text(cancelButtonName)
}
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.