#swift #localization
#swift #локализация
Вопрос:
Только что прыгнул в мир многоязычных настроек в Xcode / Swift. После хорошего просмотра этого руководства я обнаружил, что очень легко настроить несколько языков, используя базовую интернационализацию Xcode (раскадровки). Единственная проблема в том, что у меня есть программный UICollectionView, который я не вижу, используя файл языковой строки. Мои заголовки для моего UICollectionView настраиваются с помощью LET:
let titles = ["TITLE1", "TITLE2", "TITLE3", " TITLE4", "TITLE5", "TITLE6", "TITLE7", "TITLE8", "TITLE9", "TITLE10"]
Я хочу перевести заголовок # ‘s. Но я не могу добавить их в файл языковой строки, не так ли? (Потому что я не знаю идентификаторов объектов этих названий? потому что их нет в моей раскадровке?)
Ответ №1:
Редактировать: хотя этот ответ работает хорошо, если вам нужен более простой учебник или вы хотите узнать больше об этой теме, я предлагаю вместо этого прочитать мою статью.
Перейдите в раздел Проект> Информация и проверьте Use Base Internationalization
.
Затем в таблице локализации добавьте языки, которые вы хотите использовать. После их добавления они должны выглядеть следующим образом:
Теперь создайте новый файл Swift и добавьте в него все строки, которые вы хотите преобразовать, следующим образом:
//First the text to display then a comment to describe what the string means
let editStr = NSLocalizedString("Edit" , comment: "Action to modify an element")
Теперь, в вашем базовом файле (при условии, что он на английском языке), для каждой строки у вас есть запись:
"Edit" = "Edit";
Первая строка должна быть именно той, которую вы ввели в свой NSLocalizedString
before, вторая — это перевод (который, очевидно, может отличаться). Очень важно помещать ;
в конце каждой непрерывной строки;
Теперь в других ваших файлах (например, в итальянском) вы разместите точно такой же код предыдущего файла, но с правой стороны у вас будет перевод:
"Edit" = "Modifica";
Когда вам нужно присвоить заголовок чему-либо, вы присваиваете тот, который вы объявили в своем файле (т.е. editStr
).
Это практически все, что вам нужно знать.
Чтобы немедленно протестировать результаты, нажмите на название вашего приложения (рядом с кнопкой «Выполнить») и нажмите «Редактировать схему», перейдите в меню «Запуск»> «Параметры»> «Язык приложения» и измените его на нужный язык.
Для вашего конкретного случая объявите несколько NSLocalizedString
для каждого имеющегося у вас заголовка:
let title1 = NSLocalizedString("TITLE1" , comment: "Title1")
let title2 = NSLocalizedString("TITLE2" , comment: "Title2")
let title3 = NSLocalizedString("TITLE3" , comment: "Title3")
и так далее …
Затем вы добавите их в свой базовый файл и в переведенные файлы, как я показал вам выше.
Когда дело доходит до UIViewController
того, куда вы помещаете свой UICollectionView
, вы объявляете свой массив следующим образом:
let titles =[title1, title2, title3]
Это изображение по ссылке, которую вы мне прислали:
Вы объявляете свой массив как:
let titles = ["TITLE1"...]
хотя вы должны делать это как:
let titles = [TITLE1...]
где TITLE1
имя локализованной строки
Комментарии:
1. Очень приятно @Marybnq! Я понимаю ваш ответ, но дело в том, что у меня есть программный UICollectionView с ‘withReuseIdentifier’, который читает мой
let titles = ["TITLE1", "TITLE2", "TITLE3", " TITLE4", "TITLE5", "TITLE6", "TITLE7", "TITLE8", "TITLE9", "TITLE10"]
сlabel.text = titles[indexPath.row]
этого момента я не знаю, как назначить ieeditStr
, потому что ваш пример нарушает мойlabel.text = titles[indexPath.row]
2. Вы должны создать разные NSLocalizedString s с каждым имеющимся у вас заголовком. в ваших константах titles вместо записи «title1» acc вы пишете имя своей NSLocalizedString . Я обновляю свой ответ
3. Хорошо, еще раз спасибо за ваше время @Marybnq! Я уже 4 дня пытаюсь заставить его работать, но, похоже, не могу понять, где я ошибаюсь. Должно быть, что-то глупое. Краткое объяснение того, что я сделал; Я включил
Use Base Internationalization
, затем я добавил новый строковый файл с именемLocalizable.strings
и выбрал языки с помощью инспектора файлов. Добавил все"key" = "value";
к нему. Теперь, куда мне поместитьlet title1 = NSLocalizedString("TITLE1" , comment: "Title1")
? Вы говорили о создании нового файла swift для этого? Должно ли у него быть определенное имя? Спасибо ага4. нет проблем. просто поместите его в обычный swift-файл с нужным именем
5. Хорошо, попробовал это, но у меня нет никакого эффекта.. Посмотрите мою [ссылку] ( i.ibb.co/5xnCPSM/Untitled-2.jpg ) Scr # 1 — это мой Localizable.swift, куда я помещаю все NSLocalizedStrings. Scr # 2 Мои строковые файлы, каждый из которых содержит одни и те же элементы, но другие переводы. Scr # 3 снова локализуется.swift .. Scr # 4 — моя функция, которая считывает заголовки [indexPath.row], а scr # 5 — разрешенные заголовки. Должен ли я оставить последний таким образом или мне нужно как-то указать на NSLocalizedStrings?