Reputation: 1068
I have a requirement to display one text in multiple languages especially Kannada and Telugu.
I am developing with minimum required API 14 (4.0)
Upvotes: 2
Views: 12536
Reputation: 9442
Try this...
I shared here the whole application code.
Project structure
activity_main_activity1.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#2b579a"
android:orientation="vertical"
tools:context=".MainActivity1" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/kannada"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:gravity="start"
android:text="@string/kannada"
android:textColor="#FFFFFF"
android:textSize="20sp" />
<Button
android:id="@+id/telugu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:gravity="end"
android:text="@string/telugu"
android:textColor="#FFFFFF"
android:textSize="20sp" />
<Button
android:id="@+id/english"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:gravity="end"
android:text="@string/english"
android:textColor="#FFFFFF"
android:textSize="20sp" />
</LinearLayout>
<TextView
android:id="@+id/news"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="@string/note"
android:textColor="#FFFFFF"
android:textSize="20sp" />
</LinearLayout>
values/strings.xml
values-kn/strings.xml
Strings for kannada language.
values-te/strings.xml
Set font
download fonts here.
MainActivity1.java
package com.hirecraft.stackoverflowtest;
import java.util.Locale;
import android.app.Activity;
import android.content.res.Configuration;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity1 extends Activity {
/**
* Declaration
*/
Button kannada, telugu, english;
String currentLanguage;
TextView news;
Typeface kannadaFont, teluguFont;
/**
* This class describes all device configuration information
* that can impact the resources the application retrieves. This
* includes both user-specified configuration options (locale
* and scaling) as well as device configurations (such as input
* modes, screen size and screen orientation).
*/
Configuration config;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_activity1);
/**
* Initialization
*/
currentLanguage = "";
kannada = (Button) findViewById(R.id.kannada);
telugu = (Button) findViewById(R.id.telugu);
english = (Button) findViewById(R.id.english);
news = (TextView) findViewById(R.id.news);
/**
* Initialize the fonts.
*/
kannadaFont = Typeface.createFromAsset(getAssets(), "fonts/akshar.ttf");
teluguFont = Typeface.createFromAsset(getAssets(), "fonts/gautami.ttf");
/**
* Event for Kannada
*/
kannada.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/**
* "kn" is the localization code for our Kannada language.
*/
currentLanguage = "kn";
Locale locale = new Locale(currentLanguage);
Locale.setDefault(locale);
/**
* Print the current language
*/
System.out.println("My current language: "
+ Locale.getDefault());
config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
news.setText(R.string.note);
news.setTypeface(kannadaFont);
}
});
telugu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/**
* "te" is the localization code for our Telugu language.
*/
currentLanguage = "te";
Locale locale = new Locale(currentLanguage);
Locale.setDefault(locale);
/**
* Print the current language
*/
System.out.println("My current language: "
+ Locale.getDefault());
config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
news.setText(R.string.note);
news.setTypeface(teluguFont);
}
});
english.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/**
* "en" is the localization code for our default English language.
*/
currentLanguage = "en";
Locale locale = new Locale(currentLanguage);
Locale.setDefault(locale);
/**
* Print the current language
*/
System.out.println("My current language: "
+ Locale.getDefault());
config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
news.setText(R.string.note);
}
});
}
}
AndroidManifest.xml
Screen shots:
1. Default locale(English)
2. Kannada
3. Telugu
Upvotes: 24
Reputation: 1055
Use android's inbuilt Locale package to get available locales. Then filter the indian languages and finally to display them in their corresponding font, use locale.getDisplayLanguage(locale)
as shown below:
for(locale in Locale.getAvailableLocales())
if ("IN" in locale.country)
availableLanguages.add(Pair(locale.language,locale.getDisplayLanguage(locale)))
Upvotes: 0
Reputation: 4348
you need two things for that :-
like as follows :-
MyProject/
res/
values/
strings.xml
values-es/
strings.xml
values-fr/
strings.xml
more detail read it
Upvotes: 1