Search code examples
androidmultilingual

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)


Solution

  • 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