Bagaimana menerapkan lokalisasi di Swift UI

10

Adakah yang bisa membantu saya? Saya tidak dapat menemukan deskripsi lokalisasi di Swift UI. Adakah yang bisa memberikan saran atau contoh yang lebih baik tentang bagaimana melokalisasi misalnya Text()?

Oleh H
sumber

Jawaban:

15

Ketika Anda melihat dokumentasi untuk Teks, Anda dapat melihat bahwa itu mengambil LocalizedStringKey bukan String ke inisialisasi:

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

Itu membuat pelokalan sangat straightforawar. Yang harus Anda lakukan adalah:

  • buat file baru bertipe Strings File, sebut saja Localizable
  • pilih file baru dan beri nama File Inspector di panel sebelah kanan dan klik Localize ...
  • buka file proyek Anda ke bagian Pelokalan dan tambahkan bahasa lain ke daftar - Xcode akan membuat file pelokalan untuk Anda

Ketika Anda memilih Anda Localizable.strings Anda akan melihat bahwa itu berisi file untuk bahasa asli dan bahasa yang baru saja Anda tambahkan. Di situlah Anda meletakkan terjemahan Anda, yaitu kunci - pasangan teks terlokalisasi.

Jika Anda memiliki teks seperti ini adalah aplikasi Anda:

Text("Hello World!")

Anda sekarang harus menambahkan ke Localizable.strings terjemahan Anda:

untuk bahasa dasar Anda:

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

dan untuk bahasa kedua Anda (dalam hal ini Jerman):

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

Untuk melihat pratinjau Anda terlokalisasi, Anda dapat mendefinisikannya seperti ini:

struct ContentViewView_Previews: PreviewProvider {

    static var previews: some View {
        ForEach(["en", "de"], id: \.self) { id in
            ContentView()
                .environment(\.locale, .init(identifier: id))
        }
    }
}
LuLuGaGa
sumber
Terima kasih, ini sangat membantu! Tapi saya punya beberapa masalah karena beberapa bahasa sudah ditambahkan.
Oleh H
Saya mengikuti instruksi ini ke surat itu dan tidak berhasil. Saya menjalankan iOS 10.15.1 Beta dan Xcode 11.1. Setiap saran dengan senang hati diterima. Untuk saat ini saya akan menganggap kesalahan dalam perangkat lunak beta dan tidak kehilangan waktu lagi pada ini
Mum Joseph Beuys
Apa sebenarnya masalahnya?
LuLuGaGa
1
Saya menemukan masalah @LuLuGaGa. Terlihat bahwa saya tidak mengikuti instruksi surat itu, seperti yang saya katakan. File string lokalisasi saya ada di subfolder. Letakkan di tingkat proyek dan berfungsi dengan baik
Mum Joseph Beuys
1
Saya juga menemukan (saya pikir) bahwa memanggil file string selain dari Localizable berarti tidak akan berfungsi
Joseph Beuys 'Mum
3

Untuk file UI cepat, Anda hanya perlu memasukkan kunci string dari file .strings pelokalan

impor 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"))
    }
}

dan ini adalah contoh dari file .strings

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

hasilnya ada di sini

Oleh H
sumber
0

Untuk melokalkan aplikasi Anda, Anda perlu:

  1. Gunakan elemen SwiftUI seperti: Teks ("Bagus") . Nice menjadi kunci di Localizable.strings.
  2. Dalam kasus di mana teks tidak ada dalam elemen SwiftUI perlu menggunakan NSLocalizedString .
  3. Pilih target aplikasi Anda.
  4. Ekspor lokalisasi: Edit -> Ekspor untuk Lokalisasi ...
  5. Berikan file yang diekspor ke penerjemah.
  6. Impor terjemahan: Edit -> Impor Lokalisasi ...
Ramis
sumber
0

Untuk menggunakan Localazable di SwiftUI, Anda dapat melakukan cara ini:

impor SwiftUI untuk menggunakan LocalizedStringKey di file Anda

//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)
}
Roland Lariotte
sumber