Як реалізувати локалізацію в інтерфейсі Swift


10

Хтось може мені допомогти? Я не можу знайти жодного опису локалізації в інтерфейсі Swift. Чи може хто-небудь, будь ласка, дати пораду чи краще, наприклад, як локалізувати, наприклад Text()?

Відповіді:


15

Переглянувши документацію для тексту, ви побачите, що LocalizedStringKey не приймає String у свій ініціалізатор:

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

Це робить локалізацію дуже прямою війни. Все, що вам потрібно зробити:

  • створити новий файл типу Strings File, назвіть його Localizable
  • виберіть новий файл і перейдіть до File Inspector на панелі правої панелі та натисніть Localize ...
  • перейдіть до свого проекту проекту до розділу Локалізації та додайте до списку іншу мову - Xcode створить файли локалізації для вас

Вибравши Localizable.strings, ви побачите, що він містить файли для мови оригіналу та мови, яку ви тільки що додали. Ось де ви помістите свої переклади, тобто ключові локалізовані текстові пари.

Якщо у вас є такий текст, як ваш додаток:

Text("Hello World!")

Тепер ви повинні додати до Localizable.strings свої переклади:

для основної мови:

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

і для вашої другої мови (у цьому випадку німецької):

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

Щоб переглядати свої попередні перегляди, ви можете їх визначити так:

struct ContentViewView_Previews: PreviewProvider {

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

Дякую, це було корисно! Але у мене були деякі проблеми, оскільки це було вже додано кілька мов.
Олег Н

Я дотримувався цих інструкцій до листа, і це не спрацювало. Я запускаю iOS 10.15.1 Beta та Xcode 11.1. Будь-яку пораду з радістю прийняли. Поки що я збираюся припустити проблему в бета-програмі і не втрачати більше часу на це
мама Джозефа

У чому саме була проблема?
LuLuGaGa

1
Я знайшов проблему @LuLuGaGa. Здається, що я не дотримувався інструкцій до листа, як я сказав, що маю. Файл рядка моїх локалізацій знаходився в підпапці. Поставте це на рівні проекту, і він працює чудово
Мама Джозефа

1
Також я виявив (я думаю), що виклик рядків у файл, що не є Localizable, означає, що він не буде працювати
Мама Джозефа

3

Для швидкого користувальницького інтерфейсу потрібно просто вставити рядовий ключ з локалізації .strings файл

імпортувати 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"))
    }
}

і це приклад з .strings файлу

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

результат тут


0

Щоб локалізувати додаток, потрібно:

  1. Використовуйте елементи SwiftUI, такі як: Text ("Ніцца") . Ніцца стає ключовим у Localizable.strings.
  2. У випадках, коли тексту немає в елементі SwiftUI, потрібно використовувати NSLocalizedString .
  3. Виберіть ціль програми.
  4. Локалізація експорту: Правка -> Експорт для локалізації ...
  5. Надайте експортованим файлам перекладачеві.
  6. Імпортувати переклади: Редагувати -> Імпортувати локалізації ...

0

Щоб використовувати Localazable у SwiftUI, ви можете виконати наступні дії:

імпортуйте SwiftUI для використання LocalizedStringKey у своїх файлах

//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)
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.