Santhosh S Kashyap
Santhosh S Kashyap

Reputation: 1068

How can I display South Indian languages in Android?

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

Answers (3)

Silambarasan Poonguti
Silambarasan Poonguti

Reputation: 9442

Try this...

I shared here the whole application code.

Project structure

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

string

values/strings.xml

values-kn/strings.xml

Kannada

Strings for kannada language.

values-kn/strings.xml

values-te/strings.xml

values-te/strings.xml

values-te/strings.xml

Set font

languages

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

AndroidManifest.xml

Screen shots:

1. Default locale(English)

Default locale

2. Kannada

Kannada

3. Telugu

Telugu

Upvotes: 24

Damercy
Damercy

Reputation: 1055

Updated method to get available indian locales (2020)

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

Praveen Sharma
Praveen Sharma

Reputation: 4348

you need two things for that :-

  1. different values folder in res.
  2. Custom typeface font to support your regional language.

like as follows :-

MyProject/
    res/
       values/
           strings.xml
       values-es/
           strings.xml
       values-fr/
           strings.xml

more detail read it

Upvotes: 1

Related Questions