СПОСОБЫ ЛОКАЛИЗАЦИИ МОБИЛЬНЫХ ПРИЛОЖЕНИЙ ДЛЯ ОПЕРАЦИОННОЙ СИСТЕМЫ ANDROID НА ЯЗЫКЕ ПРОГРАММИРОВАНИЯ KOTLIN, НА ПРИМЕРЕ QIZ-APPLICATION
СПОСОБЫ ЛОКАЛИЗАЦИИ МОБИЛЬНЫХ ПРИЛОЖЕНИЙ ДЛЯ ОПЕРАЦИОННОЙ СИСТЕМЫ ANDROID НА ЯЗЫКЕ ПРОГРАММИРОВАНИЯ KOTLIN, НА ПРИМЕРЕ QIZ-APPLICATION
Аннотация
Благодаря быстрому развитию ИТ-сервисов и не менее быстрому развитию мобильных приложений, все чаще разработчики сталкиваются с ситуацией, когда мобильное приложение должно работать на территории сразу нескольких стран. Часто с этим возникают трудности. Как правило, разные страны имеют разные языковые и культурные особенности, правила правописания, часовой пояс. В этой статье представлен разработанный способ локализации мобильного приложения для операционной системой Android, с использованием классов, интерфейсов и объектов, написанных на языке программирования Kotlin и приведен способ локализации с применением строковых ресурсов. Оба способа продемонстрированы на примере разработанного QIZ-application. Описанные способы позволят локализировать мобильное приложение, чтобы сделать его многонациональным и многоязычным.
1. Введение
На сегодняшний день все больше разработчиков нацелены на интегрирование своих приложений по всему миру, в связи с чем, необходимость локализации только растет. Выбранная тема является актуальной еще и по причине того, что строковые ресурсы не используются повсеместно (во всех языках программирования), а реализация при помощи объектов – открывает широкие возможности на любом из них.
Цель данной работы заключается в разработке и применении нестандартного, уникального и более понятного для чтения метода локализации приложения в среде разработки Android Studio на языке программирования Kotlin.
Достижение цели было осуществлено путем решения следующих задач:
1. Анализа стандартного метода локализации с использованием Open Translations Editor;
2. Описания локализации с применением классов и интерфейсов;
3. Сравнения и выявления наиболее удобного и корректного метода локализации приложения.
Язык программирования Kotlin, который использовался для локализации Qiz-application является языком среднего уровня
. Ему присущи ограничения на прямой доступ к памяти, сильная статическая типизация, абстракция и наличие промежуточной среды выполнения . Философия языка Kotlin твердо опирается на потребности промышленного программирования – быстрая разработка, надежность , .В данной работе использовалась среда разработки Android Studio
и установленный в нее эмулятор мобильного устройства, для проверки работы приложения в режиме реального времени. Примененная среда поддерживает несколько языков программирования.Как было описано ранее, локализация приложения важна и необходима для его использования в нескольких странах. Для увеличения числа пользователей мобильного приложения и масштабирования его на мировом рынке важно программно прописать его локализацию
.2. Основные результаты
В результате была реализована программная локализации мобильного приложения, с применением классов, интерфейсов и объектов, разработанных по основным принципам языка программирования Kotlin . Перечисленные компоненты написанные на Kotlin были разработаны и созданы следующие объекты:
1. interface Quiz, у которого в качестве параметров был объявлен список вопросов:
interface Quiz {
val questions: List<Question>
}
2. class Question, в качестве параметров прописали список вопросов, список ответов и сам вопрос в строковом представлении:
class Question(
val question:String,
val answers:List<String>,
val feedback:List<String>,
)
3. enum class Locale, создан для перечисления всех языков, которые поддерживаются в разработанном мобильном приложении:
enum class Locale {
En, Ru
}
4. object QuizStorage, в котором была объявлена функция получения вопросов, ответов и фидбэка:
private val quizEn = object : Quiz {
override val questions: List<Question> = listOf(
Question(
question = "How are you feeling?",
answers = listOf(
"Bad",
"Normal",
"Good",
"Wonderful",
),
feedback = listOf(
"You are like a squeezed lemon today.",
"You are not much, but it is been worse.",
"You are in a good mood today.",
"You are in a great mood.",
),
) ....
)
}
исходя из выбранного пользователем языка для приложения:
fun getQuiz(locale: Locale): Quiz = when (locale) {
Locale.En -> quizEn
Locale.Ru -> quizRu
}
Самому объекту был прописан контент на русском и на английском языке, который демонстрировался пользователю, в зависимости от его выбора.
5. После выбора нужного языка происходило его получение:
Locale.getDefault().country.toString().
6. Далее был прописан код таким образом, чтобы по результату полученного ответа вызывалась соответствующая версия компонентов в приложении:
private val questionsList = if
(Locale.getDefault().country.toString() == "RU"){
QuizStorage.getQuiz(QuizStorage.Locale.Ru)
} else{
QuizStorage.getQuiz(QuizStorage.Locale.En)
}
Весь код структурирован и отвечает всем требованиям наследования и реализации .
Так же в результате разработки мобильного приложения был программно применен существующий способ локализации приложения. Его суть заключается в создании файлов со строковыми ресурсами под нужный язык с использованием Open Translations Editor , . В данном варианте есть некоторая особенность – это обязательное создание файла, который будет использован по умолчанию (в разработанном приложении это файл на английском языке), на случай если программа не найдет в своих файлах нужного языка для пользователя. В таком случае программой будет использован файл по умолчанию.
Частичный листинг строкового ресурса для английской локализации приложения, выбранной по умолчанию:
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="app_name">HAU</string>
<string name="action_settings">Settings</string>
<!-- Strings used for fragments for navigation -->
<string name="first_fragment_label">First Fragment</string>
<string name="second_fragment_label">Second Fragment</string>
<string name="next">Next</string>
<string name="share_thoughts">Share thoughts</string>
<string name="back">back</string>
<string name="forth">forth</string>
<string name="share">share</string> ....
Программно в коде на экранах приложения было прописано обращение к строковым ресурсам с использованием, заранее подключенного в файле сборки проекта, расширения на использование binding. Строковые значения были присвоены view-компонентам внутри функции override fun onCreateView(), передав в качестве параметров несколько значений:
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
Значения view-компонентам, демонстрирующим список вопросов, были присвоены следующим образом:
binding.question1.text = resources.getString(R.string.question_1)
binding.question2.text = resources.getString(R.string.question_2)
binding.question3.text = resources.getString(R.string.question_3)
Значения строковых ресурсов автоматически используются из файлов, в соответствии с указанным пользователем языком.
Аналогичным образом были присвоены значения для view-компонентов, разработанных для списков вариантов ответов и списка с feedback.
Разработанное приложение использует в своей конфигурации несколько экранов, наследуемых от класса Fragment(). В результате чего, для сохранения данных между экранами использовалась переменная bundle:
val bundle = Bundle().apply {
putString("param1", answer1)
putString("param2", answer2)
putString("param3", answer3)
putInt("param4", picture!!)
}
На практике был проведен анализ разработанного и существующего метода локализации для мобильных приложений. В результате к преимуществам разработанного метода можно отнести его простоту в понимании, даже для человека, который впервые видит данную структуру, не составит труда понять принцип действия и логику. Ко второму преимуществу можно отнести быстроту отклика при использовании разработки. Опытным путем было определено, что данный метод на основе классов, интерфейсов и объектов при локализации производил более быстрый отклик, что позволяет смартфону осуществлять перевод на язык пользователя бесшовно, то есть без видимых переходов.
К минусам разработанной технологии относится трудозатраты по написанию кода с использованием классов, интерфейсов и объектов. Для локализации с использованием Open Translations Editor достаточно единоразово использовать его в программном коде в то время как для написания вышеописанной методики необходимо около 70 строк кода. В сравнении с выявленными преимуществами разработанного метода, недостатки можно считать незначительными.
3. Заключение
В процессе разработки мобильного приложения для операционной системы Android, была проведена локализация Qiz-application, с целью применения разработанного ПО на международном рынке. Она производилась при помощи возможностей среды разработки Android studio, с использованием строковых ресурсов и программно, с применением классов, интерфейсов и объектов, написанных на языке программирования Kotlin. После выполнения описанных в статье действий и доработки мобильного приложения под конкретный случай и нужды пользователя, можно запускать мобильное приложения на устройствах в разных странах мира. Оно будет подстраиваться под выбранный пользователем язык и осуществлять плавный переход с одного языка на другой. Стоит упомянуть, что язык программирования, использованный в данной работе считается молодым и существует довольно мало обучающей информации на русском языке для программистов. Следовательно, данная работа помимо практического применения для разработанного Qiz-application, может служить обучающим пособием для русскоговорящих Android-разработчиков, что впоследствии поможет воспитать Android-разработчиков на языке программирования Kotlin и способствовать развитию сферы мобильной разработки в России.