app的本地化 国际化

2024-06-14 02:38
文章标签 app 国际化 本地化

本文主要是介绍app的本地化 国际化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

IOS篇

1. app name 多语言设置

注意:xcode 8 以后没有support Files 文件夹了,不用care,

只要配置文件名称填对就行   InfoPlist.strings , 在右边工具栏的localization 中选择对应的语言打勾就会

自动生成对应的子文件例如:InfoPlist.strings(English)

如果是自定义的文本命名:  Localizable.strings

名称切勿填错了,否则无效果

申明方式

"Login"="登录";

程序内引用方式:

NSLocalizedString(@"Login",@“这是注释无影响可填写nil”);

参考链接:

浅谈Xcode8通过创建strings文件来实现app名称和内容的语言国际化

iOS项目的本地化处理(多国语言)

 

2. Appstore 多语言设置

https://developer.apple.com/library/content/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide_zh_CN/Chapters/DisplayInMoreLanguages.html

 

内购的本地化

 

在应用客户端里,商品信息通过向AppStore发起SKProductsRequest获得

 

void IOSIAP::requestProducts(std::vector <std::string> &productIdentifiers)
{NSMutableSet *set = [NSMutableSet setWithCapacity:productIdentifiers.size()];std::vector <std::string>::iterator iterator;for (iterator = productIdentifiers.begin(); iterator != productIdentifiers.end(); iterator++) {[set addObject:[NSString stringWithUTF8String:(*iterator).c_str()]];}SKProductsRequest *productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:set];iAPProductsRequestDelegate *delegate = [[iAPProductsRequestDelegate alloc] init];delegate.iosiap = this;productsRequest.delegate = delegate;[productsRequest start];
}

 

- (void)productsRequest:(SKProductsRequest *)requestdidReceiveResponse:(SKProductsResponse *)response
{// release oldif (_iosiap->skProducts) {[(NSArray *)(_iosiap->skProducts) release];}// record new product_iosiap->skProducts = [response.products retain];for (int index = 0; index < [response.products count]; index++) {SKProduct *skProduct = [response.products objectAtIndex:index];// check is validbool isValid = true;for (NSString *invalidIdentifier in response.invalidProductIdentifiers) {NSLog(@"invalidIdentifier:%@", invalidIdentifier);if ([skProduct.productIdentifier isEqualToString:invalidIdentifier]) {isValid = false;break;}}IOSProduct *iosProduct = new IOSProduct;iosProduct->productIdentifier = std::string([skProduct.productIdentifier UTF8String]);iosProduct->localizedTitle = std::string([skProduct.localizedTitle UTF8String]);iosProduct->localizedDescription = std::string([skProduct.localizedDescription UTF8String]);// locale price to stringNSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];[formatter setFormatterBehavior:NSNumberFormatterBehavior10_4];[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];[formatter setLocale:skProduct.priceLocale];NSString *priceStr = [formatter stringFromNumber:skProduct.price];[formatter release];iosProduct->localizedPrice = std::string([priceStr UTF8String]);iosProduct->index = index;iosProduct->isValid = isValid;_iosiap->iOSProducts.push_back(iosProduct);}
}

 

 

注意:本地化的判断 根据用户手机登录的账号所对应的——应用市场的区域。

 

 

priceStr 是拼接好当地货币符号的价格描述

国际货币符号表

3. 官方提供的 app 内容的本地化方案

真的是非常方便!

https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPInternational/LocalizingYourApp/LocalizingYourApp.html#//apple_ref/doc/uid/10000171i-CH5-SW1

4. 本地化货币描述 和货币价格

(1)IOS渠道如何判断应该展示 什么货币?  根据用户登录的 APPID

(2)如果用户没有登录 APPID ? 那么根据下载游戏的时候记录的 APPID 来展示(猜测的)

(3)如何获得本地化的 商品描述?  APPSTORE 后台自己配置的。获取商品列表的时候可以拿到。

当然,原生弹窗展示的信息,也是在后台配置的。

(4)需要关心汇率问题吗? 不用,苹果给予的商品列表是 转换了货币符号和价格的。也就是拿到直接展示即可

(5)如何测试国外的本地化是否真的做好了? APPID 是可以切换区域的,切换到其他国家去测呗!

 

这篇关于app的本地化 国际化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1059144

相关文章

MFC中App,Doc,MainFrame,View各指针的互相获取

纸上得来终觉浅,为了熟悉获取方法,我建了个SDI。 首先说明这四个类的执行顺序是App->Doc->Main->View 另外添加CDialog类获得各个指针的方法。 多文档的获取有点小区别,有时间也总结一下。 //  App void CSDIApp::OnApp() {      //  App      //  Doc     CDocument *pD

ConstraintLayout布局里的一个属性app:layout_constraintDimensionRatio

ConstraintLayout 这是一个约束布局,可以尽可能的减少布局的嵌套。有一个属性特别好用,可以用来动态限制宽或者高app:layout_constraintDimensionRatio 关于app:layout_constraintDimensionRatio参数 app:layout_constraintDimensionRatio=“h,1:1” 表示高度height是动态变化

App Store最低版本要求汇总

1,自此日期起: 2024 年 4 月 29 日 自 2024 年 4 月 29 日起,上传到 App Store Connect 的 App 必须是使用 Xcode 15 为 iOS 17、iPadOS 17、Apple tvOS 17 或 watchOS 10 构建的 App。将 iOS App 提交至 App Store - Apple Developer 2,最低XCode版本 Xcod

鸿蒙自动化发布测试版本app

创建API客户端 API客户端是AppGallery Connect用于管理用户访问AppGallery Connect API的身份凭据,您可以给不同角色创建不同的API客户端,使不同角色可以访问对应权限的AppGallery Connect API。在访问某个API前,必须创建有权访问该API的API客户端。 1.登录AppGallery Connect网站,选择“用户与访问”。选择左侧

Xinstall助力App全渠道统计,参数传递下载提升用户体验!

在移动互联网时代,App已成为我们日常生活中不可或缺的一部分。然而,对于App开发者来说,如何有效地推广和运营自己的应用,却是一个不小的挑战。尤其是在面对众多渠道、复杂的数据统计和用户需求多样化的情况下,如何精准地触达目标用户,提升用户的下载、安装和活跃度,更是考验着每一个运营者的智慧。 今天,我们就来揭秘一个能够帮助App开发者解决这些痛点的神器——Xinstall。作为一家一站式App全渠道

Flask 创建app 时候传入的 static_folder 和 static_url_path参数理解

Flask 在创建app的时候 是用 app = Flask(__name__) 来创建的,不传入 static_folder参数的话 ,默认的静态文件的位置是在 static目录下 我们可以进入 Flask的源码里面查看 ctrl+鼠标左键进入 这是Flask的 __init__源码(后面还有一些,我就选了需要的代码)     def __init__(self,import_

Spring整合FreeMarker本地化动态设置

Spring整合FreeMarker进行国际化的过程很简单,将spring-webmvc里的org/springframework/web/servlet/view/freemarker下的spring.ftl include到各个要国际化的ftl文件里就行了,比如将这个spring.ftl复制在ftl文件目录的common下,可以这样直接在ftl里include进来 <#import "

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFArra

这个错误说的是一个不可变数组负值给了一个可变的数组。有可能你前面定义的数组是一个可变数组,但是在你其他方法里面用他的时候,他就是一个不可变数组,因为在可变数组拿到别的地方用的时候,他会默认为不可变的,可能这只是一个类里面你只是简单的声明了他吧,并没有进行对他初始化,或者分配什么内存,所以他只是一个不可变的数组,当你在其他地方用他的时候,他就默认为不可变的数组,他可能因为你的没分配内存,而变回不可变

app提交到腾讯开发平台,提示无法获取签名信息,请上传有效包(110506)

最近提交APP时遇到的,一般情况下是因为打包时至勾选v2没有勾选v1的原因,如下图: 这个时候将v1勾选即可。 但是在打包时ˉv1和v2都勾选了也可能会出现这个报错,那就要看一下gradle的 minSdkVersion,如果这个版本在24-26之间也可能会提示这个错误,所以降低这个版本就可以了

基于Python的电商导购APP设计与实现

基于Python的电商导购APP设计与实现 Design and Implementation of an E-commerce Shopping Guide App based on Python 完整下载链接:基于Python的电商导购APP设计与实现 文章目录 基于Python的电商导购APP设计与实现摘要第一章 简介1.1 研究背景1.2 研究目的1.3 研究方法1.4 论文结