Jak wdrożyć lokalizację w Swift UI


10

Czy ktoś może mi pomóc? Nie mogę znaleźć żadnego opisu lokalizacji w interfejsie Swift. Czy ktoś może na przykład udzielić porady lub lepszego przykładu lokalizacji Text()?

Odpowiedzi:


15

Gdy spojrzysz na dokumentację dotyczącą tekstu, zobaczysz, że do inicjatora zabiera on LocalizedStringKey, a nie ciąg znaków:

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

To sprawia, że ​​lokalizacja jest bardzo prosta. Wszystko co musisz zrobić to:

  • utwórz nowy plik typu Plik ciągów, nazwij go Lokalizowalny
  • wybierz nowy plik i przejdź do Inspektora plików w prawym panelu bocznym i kliknij Zlokalizuj ...
  • przejdź do pliku projektu do sekcji Lokalizacje i dodaj do listy inny język - Xcode utworzy dla Ciebie pliki lokalizacji

Po wybraniu opcji Localizable.strings zobaczysz, że zawiera pliki dla języka oryginalnego i języka, który właśnie dodałeś. Tam umieszczasz swoje tłumaczenia, tj. Zlokalizowane pary tekstowe.

Jeśli masz taki tekst, to Twoja aplikacja:

Text("Hello World!")

Musisz teraz dodać do swoich Localizable.strings swoje tłumaczenia:

dla twojego podstawowego języka:

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

i dla drugiego języka (w tym przypadku niemieckiego):

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

Aby zobaczyć swoje podglądy, możesz je zdefiniować w następujący sposób:

struct ContentViewView_Previews: PreviewProvider {

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

Dzięki, to było pomocne! Ale miałem pewne problemy, ponieważ dodałem już kilka języków.
Oleh H

Postępowałem zgodnie z instrukcjami do listu i nie zadziałało. Korzystam z systemu iOS 10.15.1 Beta i Xcode 11.1. Wszelkie porady chętnie przyjęte. Na razie zamierzam założyć usterkę w oprogramowaniu beta i nie stracę na tym więcej czasu
mama

Na czym dokładnie polegał problem?
LuLuGaGa

1
Znalazłem problem @LuLuGaGa. Okazuje się, że nie przestrzegałem instrukcji zawartych w liście, tak jak powiedziałem. Mój ciąg znaków lokalizacji był w podfolderze. Połóż to na poziomie projektu i działa dobrze
mama Josepha Beuysa,

1
Odkryłem również (myślę), że wywołanie pliku ciągów znaków innego niż Localizable oznacza, że ​​to nie zadziała
mama

3

Aby uzyskać szybki plik interfejsu użytkownika, wystarczy wstawić klucz ciągu z pliku .strings lokalizacji

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

i to jest przykład z pliku .strings

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

wynik jest tutaj


0

Aby zlokalizować aplikację, potrzebujesz:

  1. Użyj elementów SwiftUI, takich jak: Text („Nice”) . Nice staje się kluczem w Localizable.strings.
  2. W przypadkach, gdy tekstu nie ma w elemencie SwiftUI, należy użyć NSLocalizedString .
  3. Wybierz cel swojej aplikacji.
  4. Eksportuj lokalizację: Edytuj -> Eksportuj do lokalizacji ...
  5. Przekaż wyeksportowane pliki tłumaczowi.
  6. Importuj tłumaczenia: Edytuj -> Importuj lokalizacje ...

0

Aby użyć Localazable w SwiftUI, możesz wykonać następujące czynności:

zaimportuj SwiftUI, aby użyć LocalizedStringKey w swoich plikach

//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)
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.