Программный перевод языка

#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 .

Проверьте quot;Использовать базовую интернационализациюquot; внизу информационной страницы

Затем в таблице локализации добавьте языки, которые вы хотите использовать. После их добавления они должны выглядеть следующим образом:

Несколько локализованных файлов .strings на разных языках

Теперь создайте новый файл 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] этого момента я не знаю, как назначить ie editStr , потому что ваш пример нарушает мой 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?