MapBox Android版开发 4 国际化功能v11

MapBox Android版开发 4 国际化功能v11

  • 前言
  • 遇到的问题
  • 国际化功能
    • 原文给出的方案(V10版)
    • migrate-to-v11
    • 适用于V11版的代码
  • 示例
    • MapStyle类
    • 运行效果图

前言

在前文MapBox地图样式v11中,使用StylelocalizeLabels方法本地化地图语言。但Mapbox Standard样式和Mapbox Standard Satellite样式仍显示英文。本文将介绍MapBox国际化功能的使用方法。

遇到的问题

在前文本地化样式时,使用了localizeLabels方法,源码如下:

fun MapboxStyleManager.localizeLabels(locale: Locale, layerIds: List<String>? = null) {
  if (styleURI == "mapbox://styles/mapbox/standard") {
    throw RuntimeException(
      "Mapbox Standard style does not support client-side runtime localization." +
        " Consider using Mapbox internationalization capability instead: https://www.mapbox.com/blog/maps-internationalization-34-languages"
    )
  }
  setMapLanguage(locale, this, layerIds)
}

通过源码可以看出,若尝试切换Mapbox Standard地图语言时,SDK会抛出异常,并给出提示:不支持客户端运行时本地化,考虑使用Mapbox 国际化功能……

Mapbox Standard style does not support client-side runtime localization.

Consider using Mapbox internationalization capability …

那么MapBox推荐的国际化功能是什么?又如何实现Mapbox Standard样式地图语言的切换?从异常给出的链接可以找到答案。

国际化功能

Dynamically Localize Your Maps with Our New Internationalization Capability(2022),摘取部分原文:

  • Mapbox Internationalization Makes Localizing Maps Easy.

  • No more building and maintaining hundreds of styles.

  • With a more finite number of styles, the map loads dynamically and more quickly based on the users device or browser.

  • Rendering is dynamic and fast based on preferences in the device or browser, so users do not need to manually select a language display on the map.

原文给出的方案(V10版)

// Create a settings service instance as PERSISTENT, the 
// language set will be persisted across the application lifecycle.
private val settingsService: SettingsServiceInterface by lazy {
    SettingsServiceFactory.getInstance(SettingsServiceStorageType.PERSISTENT)
}
val locale = context.getResources().getConfiguration().locale
// set language in bcp-47 tag
val language = locale.language().toLanguageTag();
settingsService.set(MapboxCommonSettings.LANGUAGE, Value(language))

// set worldview
val worldView = "US"
settingsService.set(MapboxCommonSettings.WORLDVIEW, Value(worldView))

migrate-to-v11

在V11版中SettingsServiceInterface没有定义,参考官网migrate-to-v11中的说明:

The interface SettingsServiceInterface has been removed in favor of class SettingsService. SettingsServiceFactory.getInstance(...) now returns the SettingsService class.

适用于V11版的代码

// Create a settings service instance as PERSISTENT,
// the language set will be persisted across the application lifecycle.
private val settingsService: SettingsService by lazy {
    SettingsServiceFactory.getInstance(SettingsServiceStorageType.PERSISTENT)
}
val locale = context.resources.configuration.locales[0]
// set language in bcp-47 tag
val language = locale.toLanguageTag()
settingsService.set(MapboxCommonSettings.LANGUAGE, Value(language))

// set worldview
val worldView = "CN"
settingsService.set(MapboxCommonSettings.WORLDVIEW, Value(worldView))
// worldview: CN (China), IN (India), JP (Japan), US (United States)

示例

MapStyle类

修改Style的本地化示例代码

package com.example.mapdemo

import android.content.Context
import com.mapbox.bindgen.Value
import com.mapbox.common.MapboxCommonSettings
import com.mapbox.common.SettingsService
import com.mapbox.common.SettingsServiceFactory
import com.mapbox.common.SettingsServiceStorageType
import com.mapbox.maps.MapboxMap
import com.mapbox.maps.Style
import com.mapbox.maps.extension.localization.localizeLabels
import java.util.Locale

class MapStyle(map: MapboxMap) {
    private var map = map

    // Create a settings service instance as PERSISTENT,
    // the language set will be persisted across the application lifecycle.
    private val settingsService: SettingsService by lazy {
        SettingsServiceFactory.getInstance(SettingsServiceStorageType.PERSISTENT)
    }

    fun changeStyle(context: Context, style: String) {
        map.loadStyle(style) {
            if (style != Style.STANDARD && style != Style.STANDARD_SATELLITE) {
                it.localizeLabels(Locale.CHINESE)
            } else {
                val locale = context.resources.configuration.locales[0]
                // set language in bcp-47 tag
                val language = locale.toLanguageTag()
                settingsService.set(MapboxCommonSettings.LANGUAGE, Value(language))

                val worldView = "CN"
                settingsService.set(MapboxCommonSettings.WORLDVIEW, Value(worldView))
            }
        }
    }
}

运行效果图

3D基础3D影像
在这里插入图片描述在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/873720.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3DMax基础- 样条线和点,线,面,边界操作

目录 一、样条线 二、多边形编辑​​​​​​​ 三. 点操作 三、线操作 四、面操作 五. 边界 一、样条线 创建样条线&#xff1a; 在 “创建” 面板中选择 “图形”&#xff0c;然后可以看到各种样条线工具&#xff0c;如线、矩形、圆、椭圆等。以 “线” 工具为例&#…

EPIC超级“喜加N”!AOC U32G4ZMN助你畅玩缤纷九月

废土探险、绿茵征战、狙击猎杀&#xff0c;AOC U32G4ZMN带你玩转九月&#xff01; Epic游戏商城近日开启“喜加N”游戏盛宴&#xff0c;上周公布的免费游戏&#xff1a;《辐射经典合集》与《外卡橄榄球》&#xff0c;领取时间截止至9月5日&#xff0c;还没领取的玩家&#xff…

Kafka【九】如何实现数据的幂等性操作

为了解决Kafka传输数据时&#xff0c;所产生的数据重复和乱序问题&#xff0c;Kafka引入了幂等性操作&#xff0c;所谓的幂等性&#xff0c;就是Producer同样的一条数据&#xff0c;无论向Kafka发送多少次&#xff0c;kafka都只会存储一条。注意&#xff0c;这里的同样的一条数…

计算机网络:http协议

计算机网络&#xff1a;http协议 一、本文内容与前置知识点1. 本文内容2. 前置知识点 二、HTTP协议工作简介1. 特点2. 传输时间分析3. http报文结构 三、HTTP版本迭代1. HTTP1.0和HTTP1.1主要区别2. HTTP1.1和HTTP2主要区别3. HTTPS与HTTP的主要区别 四、参考文献 一、本文内容…

BERT 论文逐段精读【论文精读】

BERT: 近 3 年 NLP 最火 CV: 大数据集上的训练好的 NN 模型&#xff0c;提升 CV 任务的性能 —— ImageNet 的 CNN 模型 NLP: BERT 简化了 NLP 任务的训练&#xff0c;提升了 NLP 任务的性能 BERT 如何站在巨人的肩膀上的&#xff1f;使用了哪些 NLP 已有的技术和思想&#xff…

网络层协议-ARP协议

网络层协议-ARP协议 1&#xff09;概述 ARP&#xff1a;地址解析协议&#xff0c;作用&#xff1a;根据IP地址查询MAC地址 数据包发送前需要进行封包&#xff0c;在数据链路层需要封装源mac地址是自己的mac&#xff0c;目的mac地址是别人&#xff0c;但是不知道别人的mac地址…

基于VUE的校园二手物品交易管理系统的设计与实现 (含源码+sql+视频导入教程)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于VUE的校园二手物品交易管理系统8拥有两种角色 管理员&#xff1a;闲置物品管理、订单管理、用户管理 用户&#xff1a;登录注册、购物车、发布闲置物品、评论、发货、收货地址管理等…

AI在医学领域:MIL回归用于前列腺癌复发预测

2024年&#xff0c;全球男性新癌症病例预计为1029080例&#xff0c;其中前列腺癌病例预计为29%。前列腺癌是男性中第二常见的癌症类型&#xff0c;仅次于肺癌。它主要影响老年男性&#xff0c;且发病率随年龄增长而增加。前列腺癌的主要治疗方法是前列腺切除术&#xff0c;但术…

探索手势能够识别在训练数据中未观察到的情绪

介绍 论文地址&#xff1a;https://arxiv.org/pdf/2202.10571.pdf 基于人工智能的情感识别研究领域是各个领域不可或缺的&#xff0c;如机器人和情感计算&#xff0c;并在语音中使用面部表情和手势来实现人们提出了各种方法来识别一个人的情绪。然而&#xff0c;这些基于机器学…

C语言 | Leetcode C语言题解之第391题完美矩形

题目&#xff1a; 题解&#xff1a; /* 参照官方答案题解&#xff1a; 1.小矩形面积之和等于大矩形区域面积 2.矩形区域内部顶点出现次数只能是2次或4次&#xff08;边界四个顶点只能出现一次&#xff09; */ typedef struct {int x;int y; } Coordinate;typedef struct {Coor…

JavaWeb(后端)

Spring-MVC Spring MVC&#xff08;Model-View-Controller&#xff09;是Spring框架中的一个模块&#xff0c;用于构建基于MVC设计模式的Web应用程序。Spring MVC将应用程序分为三个主要部分&#xff1a; Model&#xff1a;负责处理数据和业务逻辑。View&#xff1a;负责展示…

Rancher 与 Kubernetes(K8s)的关系

1. 简介 1.1 Kubernetes 作为容器编排平台 Kubernetes 是一个开源平台&#xff0c;用于自动化部署、扩展和管理容器化的应用。它提供了容器调度、自动伸缩、健康检查、滚动更新等功能。 例子&#xff1a;假设您有一个微服务架构的应用程序&#xff0c;需要运行在多个节…

单例的饿汉式,懒汉式的线程安全问题

1 单例的饿汉式 对象在类加载的时候就创建了&#xff0c;线程安全&#xff0c;速度块&#xff0c;但是浪费空间&#xff0c; public class Hungry {//唯一对象private static final Hungry HUNGRY new Hungry();byte byte1[]new byte[1024];byte byte2[]new byte[1024];byte…

openSSL 如何降版本

文章目录 前言openSSL 如何降版本1. 卸载2. 安装新的openssl版本3. 验证 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的话&…

DDS-数据分发服务

目录 1.ROS2架构 2.DDS概念 参考资料 1.ROS2架构 在ROS 2&#xff08;Robot Operating System 2&#xff09;中&#xff0c;系统通常由以下几个核心部分组成&#xff0c;它们共同构成了ROS 2的架构和功能&#xff1a; Plumbing&#xff08;管道&#xff09;: 这个术语在ROS …

Oracle OCP认证值得考吗? 需要门槛吗?

随着数据量的爆炸性增长和企业对数据依赖性的提升&#xff0c;对数据库专业人士的需求也在不断上升。OCP认证&#xff0c;作为Oracle公司提供的权威认证之一&#xff0c;长期以来被视为数据库专业人士技能和知识水平的重要标志。 但随着技术的发展和认证种类的增多&#xff0c;…

快速解决git am冲突

前言 当希望通过git am xxxx.patch&#xff0c;添加一些代码修改&#xff0c;如果代码版本相差较大&#xff0c;就可能产生冲突。 这种必须要我们手动修改冲突内容。 解决过程 1. git am 尝试打入patch补丁 git am 0004-patch.patch2. git apply --reject生成冲突文件 执行…

uniapp设置微信小程序的交互反馈

链接&#xff1a;uni.showToast(OBJECT) | uni-app官网 (dcloud.net.cn) 设置操作成功的弹窗&#xff1a; title是我们弹窗提示的文字 showToast是我们在加载的时候进入就会弹出的提示。 2.设置失败的提示窗口和标签 icon&#xff1a;error是设置我们失败的logo 设置的文字上…

keil安装及运行第一个stm32程序

前言 记录如何安装keil软件及运行第一个stm32程序 目录 一、keil开发环境搭建 0.keil是什么 1.keil下载 2.keil软件安装 3.安装芯片支持包 4.破解激活 二、keil工程结构 1.创建目录结构 2.新建工程 3.配置项目 (1).例程准备 (2).工程目录管理 (3).选项配置 4.例…

渗透测试学习资源

burp学院 https://portswigger.net/burp/documentation/desktop/getting-started https://portswigger.net/web-security/ hacker101学院 https://www.hacker101.com/ https://github.com/bugcrowd/bugcrowd_university 如何白嫖自学网络安全技术&#xff0c;最稳最推荐的网…