如何在安卓Google地图V2中更改语言

15

我正在使用google-play-service-lib。如何更改谷歌地图的语言,即以韩语或印地语显示位置。


你解决了印地语的问题吗?下面给出的例子适用于“ko”,但不适用于“hi”。 - Arth Tilva
@ArthTilva 这是一个非常古老的查询,所以我已经忘记了对印地语的支持。 - Vibhor Bhardwaj
对于询问印地语(hi_IN)语言的人,请在以下链接中查看答案:https://stackoverflow.com/questions/48862517/how-can-i-change-google-maps-language-to-hindi-in-my-app/63918493#63918493 - betofarina
5个回答

13
你可以使用Locale对象更改使用Google Map API V2的Google地图的位置。但需要确保设备支持该语言。
这里是支持的所有语言列表
使用下面的代码,我成功将地图语言更改为中文:
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    String languageToLoad = "zh_CN";
    Locale locale = new Locale(languageToLoad);
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config,
            getBaseContext().getResources().getDisplayMetrics());

    setContentView(R.layout.activity_maps);

    setUpMapIfNeeded();

}

在美国的手机上,代码中将语言设置为中文(没有手动更改)的结果:

Chinese Map

我也成功地让它显示了韩文,使用这个Locale代码:

 String languageToLoad = "ko_KR";

结果:

Korean Map

注意

看起来Google Maps支持的语言在这里列出: https://developers.google.com/maps/faq#languagesupport


2
这段代码非常接近我已经有的代码。这使得我的应用程序中的所有其他部分都使用所需的语言环境,但不包括地图。也许是因为我使用了支持库的地图:getSupportFragmentManager().findFragmentById(R.id.map)。 - Gavriel
1
好的,看起来它部分地工作了!Locale.setDefault(locale); 似乎是关键,但它被严重缓存,所以当我在应用程序中更改语言环境时,它不会更改地图的语言环境。 - Gavriel
1
@Gavriel 有趣。需要注意的一点是,在调用setContentView()或任何其他类型的布局填充之前,务必先调用它。 - Daniel Nugent
@VaishaliSharma,你尝试使用“hi_IN”的上述解决方案了吗? - Daniel Nugent
1
@DanielNugent 抱歉在这个旧帖子上继续发言,但我尝试了您在此答案中提供的解决方案,同时使用区域设置“ko_KR”,它可以正常工作。但是将区域设置更改为“hi”或“hi_IN”无法正常工作。在谷歌的问题跟踪器此处存在一个问题,我已经添加了评论。 - Bluesir9
显示剩余4条评论

3
我们只需要在应用程序中更改位置,就可以获得具有不同语言的地图描述。我们必须添加验证以避免使用已弃用的方法:
 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        String language= "hi"; //Hindi language!.
        Locale locale = new Locale(language);
        Locale.setDefault(locale);
        Configuration config = new Configuration();

        if(Build.VERSION.SDK_INT>Build.VERSION_CODES.JELLY_BEAN){
           config.setLocale(locale);
           getContext().createConfigurationContext(config);
        }else { //deprecated 
           config.locale = locale;
           getResources().updateConfiguration(config, getResources().getDisplayMetrics());
        }

...
...

需要强调的是并不支持所有语言,以下是俄语的示例:

introducir la descripción de la imagen aquí

我们可以从以下网址获取编码语言:

https://www.transifex.com/explore/languages/


1

只需在设备上更改语言环境。如果有可用的翻译,它们将自动显示。

美国手机语言环境切换为韩语的屏幕截图:


3
可以吗?我尝试将设备的语言环境更改为意大利语、西班牙语和法语,但 Google 地图总是显示英文。 - Giulio Piancastelli
2
注意:应用程序在启动时选择其语言。您可能需要强制停止应用程序并重新启动它以更改语言。 - Kevin Krumwiede
我提到的第三方应用的目的是更改设备的区域设置,而不是特定的地图。一旦区域设置更改,对于该区域设置具有资源的所有应用程序都应自动开始使用它们。 (但要注意,它们必须重新启动,这可能意味着强制关闭它们。) - Kevin Krumwiede
有没有一种方法可以在我的应用程序中以编程方式更改地图的语言(而不更改系统语言环境)? - Gavriel
1
@Gavriel 有点晚了!但是如果你还感兴趣,我刚刚发布了一个可以通过编程方式更改地图语言的答案。 - Daniel Nugent
显示剩余3条评论

1
希望这个简单的解决方案能够帮助到一些人更改地图语言:
只需在你的活动的 onCreate() 方法中添加调用 setUpMapLocale() 即可:
 private fun setUpMapLocale() {
        val languageToLoad = "iw_IL" // your desired language locale
        val locale = Locale(languageToLoad)
        Locale.setDefault(locale)
        baseContext.resources.configuration.setLocale(locale)
    }

所以我只需要在附加到baseContext资源的现有配置上调用setLocale()

0

现在有了新的Google地图渲染支持,你可以得到这个,只需要按照几个步骤操作:

  1. 更新Google地图依赖项

    implementation 'com.google.android.gms:play-services-maps:18.1.0'

  2. 创建一个扩展应用程序的新类,并初始化一个新的地图渲染器。

     class MyApplication : Application() {
            override fun onCreate() {
            super.onCreate()
            MapsInitializer.initialize(
                applicationContext,
                MapsInitializer.Renderer.LATEST,
                object : OnMapsSdkInitializedCallback {
                override fun onMapsSdkInitialized(p0: MapsInitializer.Renderer) {
                     Log.e("MapsInitializer", p0.name)
                 }
             })
     }
    

    }

  3. 在清单中注册MyApplication类。

<application
    android:name="com.extra.MyApplication"
    android:label="@string/app_name"
    android:screenOrientation="portrait"
    android:theme="@style/AppTheme">

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接