Статьи

Создание многоязычных приложений для Android с использованием пользовательской локализации

В современном технически подкованном мире компании жаждут действенной обратной связи со своими клиентами, как правило, в форме опросов и других механизмов обратной связи с клиентами. Это стало обычной практикой, которая предоставляет организованные данные для компании и простой и понятный процесс для самих клиентов. Один клик сохраняет данные на общем сервере и избавляет от хлопот бумажных анкет. Многоязычные приложения для проведения опросов являются еще более полезными и мощными, поскольку они помогают геодезистам собирать данные по конкретным регионам и проводить международные опросы из единой системы.

Концепция пользовательской локализации в Android SDK играет важную роль в обеспечении сильной поддержки многоязычной интерактивности. Пользовательская локализация означает, что пользователь должен иметь возможность изменять язык приложения, используя настройки приложения, без необходимости менять язык всего мобильного устройства. Одним из ограничений является то, что многоязычная поддержка индийских языков не является частью Android SDK, что создает серьезную проблему для разработчиков, выполняющих пользовательскую локализацию на ОС Android.

Используя платформу Android SDK, концепция локализации может быть легко реализована, но основной проблемой является недостаточная поддержка локализации для индийских родных языков. Для любого иностранного языка в качестве локали устройства можно указать имя языка. Например, пользователи из Франции могут изменить язык своего устройства на французский, и весь письменный контент будет преобразован во французский язык. Одним из преимуществ следующего основанного на опросе приложения является то, что оно поддерживает региональные языки Индии, такие как тамильский, маратхи, хинди и многие другие.

Описание

Android SDK предоставляет функцию API, которая позволяет использовать внешние шрифты. Эти шрифты позволяют отображать символы и символы, используемые в разных языках. Чтобы использовать этот подход, каждый компонент инициализируется в классе деятельности, а его тип шрифта устанавливается так, чтобы обеспечить отображение правильного шрифта. Этот подход решает проблему поддержки региональных языков, но его нельзя считать идеальным решением, поскольку он создает большое количество ненужных объектов и ссылок в классе деятельности.

Для разработки многоязычного приложения поддержки необходимо отметить следующие моменты:

Android SDK предоставляет тип ресурса для создания пользовательских атрибутов для представлений. Пользовательский атрибут может быть создан как «langtext». Пожалуйста, для ясности обратитесь к следующему фрагменту кода:

<!--?xml version="1.0" encoding="UTF-8"?-->

В файле strings.xml строковые значения были созданы в паре ключ-значение. Ниже приведена демонстрация.

 </pre>
error

Error // text in english

गलती //text in hindi

తప్పు //text in telugu
<pre>

Эти строки создаются таким образом, что при добавлении типа языка (например, en, hi, tu) в значение key_ <somevalue> он возвращает фактическое значение строки на выбранном языке.

Можно создать пользовательский вид, который расширяет класс TextView в Android. В этом классе переопределите setTypeface. Используя этот метод, установите требуемый файл шрифта для textview. Пожалуйста, обратитесь к следующему фрагменту кода:

[sourcecode language = ”java”]
пакет com.wb.mobile.android.ot.ui.customviews;

импорт android.content.Context;
import android.content.res.TypedArray;
импорт android.graphics.Typeface;
import android.util.AttributeSet;
import android.widget.TextView;

импорт com.sample.mobile.android.ot.R;
импорт com.sample.mobile.android.ot.ui.activities.SplashScreen;
import com.sample.mobile.android.ot.utils.Constants;
import com.sample.mobile.android.ot.utils.Helper;

/ **
* Пользовательская реализация textview для поддержки нескольких языков.
*
* @author magarwal
*
* /
открытый класс MultiLingualTextView расширяет TextView {

частная строка mLangText;

public String getLangText () {
return mLangText;
}

public MultiLingualTextView (Context context) {
супер (контекст);
}

public MultiLingualTextView (Контекст контекста, атрибуты AttributeSet) {
супер (контекст, attrs);

TypedArray typedArray = context.obtainStyledAttributes (attrs,
R.styleable.CustomTextView, 0, 0);
String lang = SplashScreen.getUserSettings (). GetString (
Constants.LANG_CONSTANST_STR, Constants.LANG_CONSTANST_EN);
String langText = typedArray
.getString (R.styleable.CustomTextView_langText);
mLangText = langText;
if (Helper.checkString (langText)) {
this.setText (Helper.getStringResource (getContext (), lang + & quot; _ & amp; quot;
+ langText, & amp; quot; string & amp; quot;));
}
}

public MultiLingualTextView (Контекст контекста, атрибуты AttributeSet,
int defStyle) {
супер (context, attrs, defStyle);
}

@Override
public void setTypeface (Typeface tf) {
String lang = SplashScreen.getUserSettings (). GetString (
Constants.LANG_CONSTANST_STR, Constants.LANG_CONSTANST_EN);
if (lang.equalsIgnoreCase (Constants.LANG_CONSTANST_EN)) {
super.setTypeface (тс);
} еще {
super.setTypeface (Helper.getTypeface (getContext ()));
}
}

@Override
public void setTypeface (Typeface tf, int style) {
String lang = SplashScreen.getUserSettings (). GetString (
Constants.LANG_CONSTANST_STR, Constants.LANG_CONSTANST_EN);
if (lang.equalsIgnoreCase (Constants.LANG_CONSTANST_EN)) {
super.setTypeface (тс);
} еще {
super.setTypeface (Helper.getTypeface (getContext ()));
}
}

public void setLangText (String langText) {

mLangText = langText;

String lang = SplashScreen.getUserSettings (). GetString (
Constants.LANG_CONSTANST_STR, Constants.LANG_CONSTANST_EN);

if (Helper.checkString (langText)) {
this.setText (Helper.getStringResource (getContext (), lang + & quot; _ & amp; quot;
+ langText, & amp; quot; string & amp; quot;));
}
}

}
[/исходный код]

Теперь нам нужно рассмотреть функцию, которая извлекает значение строкового ресурса, что продемонстрировано в следующем фрагменте кода:

[sourcecode language = ”java”]
/ **

* получить значение переведенной строки, связанное с ключом.

*

* @param context

* — ссылка на активность для доступа к API

* @param name

* — ключ, для которого требуется строка.

* @param type

* — & quot; строка & amp; quot; как в R.string.sth

* @return — переведенное значение.

* /

public static String getStringResource (контекстный контекст, имя строки,

Тип строки) {

пытаться {

int id = context.getResources (). getIdentifier (имя, тип,

context.getPackageName ());

return context.getResources (). getString (id);

} catch (исключение e) {

Helper.printStackTrace (е);

вернуть имя;

}

}

[/исходный код]

Применительно к ОС Android этот код будет отображать текстовое содержимое на языке по выбору пользователя, даже если этот язык является одним из неподдерживаемых индийских языков. Наш пользовательский код обеспечивает многоязычность, которую можно использовать в любой точке мира.

aalang
aalang2

aalang3

Вывод

Если вы не обслуживаете пользователей за пределами своей страны, вы, скорее всего, упускаете огромные возможности. Если вас пугает многоязычное приложение, надеюсь, эта демонстрация продемонстрирует многоязычные возможности Android, а также пользовательское кодирование, способное работать даже с неподдерживаемыми языками. Если вы ищете больше пользователей, большую аудиторию или выход на международные рынки, вы бы с ума сошли, если бы не встроили многоязычную поддержку в ваше приложение для Android.