【问题标题】:How can I display South Indian languages in Android?如何在 Android 中显示南印度语言?
【发布时间】:2014-04-25 01:50:01
【问题描述】:

我需要以多种语言显示一个文本,尤其是卡纳达语和泰卢固语。
我正在使用最低要求的 API 14 (4.0) 进行开发

【问题讨论】:

    标签: android multilingual


    【解决方案1】:

    试试这个...

    我在这里分享了整个应用程序代码。

    项目结构

    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

    卡纳达语的字符串。

    values-te/strings.xml

    设置字体

    下载字体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

    屏幕截图:

    1.默认语言环境(英语)

    2。卡纳达语

    3.泰卢固语

    【讨论】:

    • 嗨,我们需要申请 typespace 吗??
    • @Prashanth Debbadwar,是的。你需要应用 Typespace。
    【解决方案2】:

    你需要两件事:-

    1. res 中的不同值文件夹。
    2. 自定义字体字体以支持您的区域语言。

    如下:-

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

    更多detail阅读

    【讨论】:

      【解决方案3】:

      更新了获取可用印度语言环境的方法 (2020)

      使用 android 的内置 Locale 包来获取可用的语言环境。然后过滤印度语言,最后以对应的字体显示,使用locale.getDisplayLanguage(locale),如下所示:

      for(locale in Locale.getAvailableLocales())
       if ("IN" in locale.country)
        availableLanguages.add(Pair(locale.language,locale.getDisplayLanguage(locale)))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-22
        • 2012-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-17
        相关资源
        最近更新 更多