如何强制应用程序更改 iOS/Objective-C 中的语言?

2024-01-07

我在让应用程序立即更改语言时遇到问题,例如this app https://itunes.apple.com/app/zalo-nhan-tin-kieu-moi/id579523206?mt=8.

我发现了很多类似的问题this https://stackoverflow.com/questions/23977816/how-to-force-an-ios-app-to-use-a-certain-localization and this https://stackoverflow.com/questions/9939885/manual-language-selection-in-an-ios-app-iphone-and-ipad.

但不幸的是,这些问题的相关答案对我不起作用。当我点击单元格时,我需要我的应用程序立即更改语言。

有任何想法吗?预先感谢。


我的解决方案

首先您需要创建字符串文件

Go to Project Right Click.
New File->iOS
Under iOS you can see the Resource
Click Resource and you can see the String File among the group of files.
Click that give name whatever you want.

现在您可以创建下面的字符串文件。

"Date"="Date";

"Time"="Time";

"Done"="Done";

 "Back"="Back";

在appDelegate.h中

-(NSString*) languageSelectedStringForKey:(NSString*) key
{
  NSString *path;
  AppDelegate *app=(AppDelegate *)[[UIApplication sharedApplication]delegate];
  if(app.currentLanguage==ENGLISH)
  path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
  else if(app.currentLanguage==TAMIL)
  path = [[NSBundle mainBundle] pathForResource:@"ta-IN" ofType:@"lproj"];
  else if(app.currentLanguage==SPANISH)
  path = [[NSBundle mainBundle] pathForResource:@"es" ofType:@"lproj"];
  else if(app.currentLanguage==FRENCH)
  path = [[NSBundle mainBundle] pathForResource:@"fr" ofType:@"lproj"];
  else if(app.currentLanguage==JAPANESE)
  path = [[NSBundle mainBundle] pathForResource:@"ja" ofType:@"lproj"];
  else if(app.currentLanguage==GERMAN)
  path = [[NSBundle mainBundle] pathForResource:@"de" ofType:@"lproj"];
  else if(app.currentLanguage==KOREAN)
  path = [[NSBundle mainBundle] pathForResource:@"ko" ofType:@"lproj"];
  else if(app.currentLanguage==RUSSIAN)
  path = [[NSBundle mainBundle] pathForResource:@"ru" ofType:@"lproj"];
  else if(app.currentLanguage==HINDI)
  path = [[NSBundle mainBundle] pathForResource:@"hi" ofType:@"lproj"];
  else if(app.currentLanguage==CHINESE)
  path = [[NSBundle mainBundle] pathForResource:@"zh-Hans" ofType:@"lproj"];
  else if(app.currentLanguage==ITALIAN)
  path = [[NSBundle mainBundle] pathForResource:@"it" ofType:@"lproj"];
  else if(app.currentLanguage==PORTUGUESE)
  path = [[NSBundle mainBundle] pathForResource:@"pt" ofType:@"lproj"];
  else if(app.currentLanguage==THAI)
  path = [[NSBundle mainBundle] pathForResource:@"th" ofType:@"lproj"];
  else if(app.currentLanguage==MALAY)
  path = [[NSBundle mainBundle] pathForResource:@"ms" ofType:@"lproj"];
  else if(app.currentLanguage==INDONESIAN)
  path = [[NSBundle mainBundle] pathForResource:@"id" ofType:@"lproj"];
  else if(app.currentLanguage==CHINESE1)
  path = [[NSBundle mainBundle] pathForResource:@"zh-Hant" ofType:@"lproj"];
  else
  {
    path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
  }
  NSBundle* languageBundle = [NSBundle bundleWithPath:path];
  NSString* str=[languageBundle localizedStringForKey:key value:@"" table:@"LocalizeSTRING"];
  return str;
 }

在 appDelegate.m 的 didFinishLaunchingWithOptions 中调用上面的方法

NSString *str=[[[NSUserDefaults standardUserDefaults]objectForKey:@"AppleLanguages"] objectAtIndex:0];

if([str isEqualToString:[NSString stringWithFormat: @"en"]])
{
    currentLanguage=ENGLISH;
    selectedrow=ENGLISH;
}
else if([str isEqualToString:[NSString stringWithFormat: @"ta-IN"]])
{
    currentLanguage=TAMIL;
    selectedrow=TAMIL;
}
else if([str isEqualToString:[NSString stringWithFormat: @"es"]])
{
    currentLanguage=SPANISH;
    selectedrow=SPANISH;
}
else if([str isEqualToString:[NSString stringWithFormat: @"fr"]])
{
    currentLanguage=FRENCH;
    selectedrow=FRENCH;
}
else if([str isEqualToString:[NSString stringWithFormat: @"ja"]])
{
    currentLanguage=JAPANESE;
    selectedrow=JAPANESE;
}
else if([str isEqualToString:[NSString stringWithFormat: @"de"]])
{
    currentLanguage=GERMAN;
    selectedrow=GERMAN;
}
else if([str isEqualToString:[NSString stringWithFormat: @"ko"]])
{
    currentLanguage=KOREAN;
    selectedrow=KOREAN;
}
else if([str isEqualToString:[NSString stringWithFormat: @"ru"]])
{
    currentLanguage=RUSSIAN;
    selectedrow=RUSSIAN;
}
else if([str isEqualToString:[NSString stringWithFormat: @"hi"]])
{
    currentLanguage=HINDI;
    selectedrow=HINDI;
}
else if([str isEqualToString:[NSString stringWithFormat: @"zh-Hans"]])
{
    currentLanguage=CHINESE;
    selectedrow=CHINESE;
}
else if([str isEqualToString:[NSString stringWithFormat: @"it"]])
{
    currentLanguage=ITALIAN;
    selectedrow=ITALIAN;
}
else if([str isEqualToString:[NSString stringWithFormat: @"pt"]])
{
    currentLanguage=PORTUGUESE;
    selectedrow=PORTUGUESE;
}
else if([str isEqualToString:[NSString stringWithFormat: @"th"]])
{
    currentLanguage=THAI;
    selectedrow=THAI;
}
else if([str isEqualToString:[NSString stringWithFormat: @"ms"]])
{
    currentLanguage=MALAY;
    selectedrow=MALAY;
}
else if([str isEqualToString:[NSString stringWithFormat: @"id"]])
{
    currentLanguage=INDONESIAN;
    selectedrow=INDONESIAN;
}

else if([str isEqualToString:[NSString stringWithFormat: @"zh-Hant"]])
{
    currentLanguage=CHINESE1;
    selectedrow=CHINESE1;
}

[self languageSelectedStringForKey:str];

然后在您所需的视图控制器中

-(NSString*) languageSelectedStringForKey:(NSString*) key
{
  app=(AppDelegate *)[[UIApplication sharedApplication]delegate];
  if(app.currentLanguage==ENGLISH)
  path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
  else if(app.currentLanguage==TAMIL)
  path = [[NSBundle mainBundle] pathForResource:@"ta-IN" ofType:@"lproj"];
  else if(app.currentLanguage==SPANISH)
  path = [[NSBundle mainBundle] pathForResource:@"es" ofType:@"lproj"];
  else if(app.currentLanguage==FRENCH)
  path = [[NSBundle mainBundle] pathForResource:@"fr" ofType:@"lproj"];
  else if(app.currentLanguage==JAPANESE)
  path = [[NSBundle mainBundle] pathForResource:@"ja" ofType:@"lproj"];
  else if(app.currentLanguage==GERMAN)
  path = [[NSBundle mainBundle] pathForResource:@"de" ofType:@"lproj"];
  else if(app.currentLanguage==KOREAN)
  path = [[NSBundle mainBundle] pathForResource:@"ko" ofType:@"lproj"];
  else if(app.currentLanguage==RUSSIAN)
  path = [[NSBundle mainBundle] pathForResource:@"ru" ofType:@"lproj"];
  else if(app.currentLanguage==HINDI)
  path = [[NSBundle mainBundle] pathForResource:@"hi" ofType:@"lproj"];
  else if(app.currentLanguage==CHINESE)
  path = [[NSBundle mainBundle] pathForResource:@"zh-Hans" ofType:@"lproj"];
  else if(app.currentLanguage==ITALIAN)
  path = [[NSBundle mainBundle] pathForResource:@"it" ofType:@"lproj"];
  else if(app.currentLanguage==PORTUGUESE)
  path = [[NSBundle mainBundle] pathForResource:@"pt" ofType:@"lproj"];
  else if(app.currentLanguage==THAI)
  path = [[NSBundle mainBundle] pathForResource:@"th" ofType:@"lproj"];
  else if(app.currentLanguage==MALAY)
  path = [[NSBundle mainBundle] pathForResource:@"ms" ofType:@"lproj"];
  else if(app.currentLanguage==INDONESIAN)
  path = [[NSBundle mainBundle] pathForResource:@"id" ofType:@"lproj"];
  else if(app.currentLanguage==CHINESE1)
  path = [[NSBundle mainBundle] pathForResource:@"zh-Hant" ofType:@"lproj"];
  else
  {
    path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
  }
  NSBundle* languageBundle = [NSBundle bundleWithPath:path];
  NSString* str=[languageBundle localizedStringForKey:key value:@"" table:@"LocalizeSTRING"];
  return str;
}

在你的 viewDidLoad 和 viewWillAppear 方法中调用上面的方法或者在你想要调用的地方调用该方法

- (void)viewWillAppear:(BOOL)animated
{
  //If you want to set language in label,TextFiled
  localizeBackLabel.text=[self languageSelectedStringForKey:@"Back"];
  localizeDoneLabel.text=[self languageSelectedStringForKey:@"Done"];
  localizeTimeLabel.text=[self languageSelectedStringForKey:@"Time"];
  localizeDateLabel.text=[self languageSelectedStringForKey:@"Date"];

  //If you want to set language in button
  [yourButton setTitle:[self languageSelectedStringForKey:@"Back"]; forState:UIControlStateNormal];
  [yourButton setTitle:[self languageSelectedStringForKey:@"Done"]; forState:UIControlStateNormal];

   //If you want to set the Language in cell     
   cell.labelHomeList.text=[self languageSelectedStringForKey:@"Date"];
   cell.labelHomeList.text=[self languageSelectedStringForKey:@"Time"];
}

最后,如果您想将语言更改为其他语言。例如,在(设置)表中您有两种语言。如果您想将其更改为其他语言,请按照以下编码操作

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{  
   AppDelegate *app=(AppDelegate *)[[UIApplication sharedApplication]delegate];
   app.selectedrow=indexPath.row;
   if (indexPath.row==0)
   {
     app.currentLanguage=ENGLISH;
     [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"en", nil]forKey:@"AppleLanguages"];
     [[NSUserDefaults standardUserDefaults] synchronize];
      NSLog(@"%d", [[NSUserDefaults standardUserDefaults] synchronize]);
    }
    else 
    {
      app.currentLanguage=CHINESE1;
      [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"zh-Hant", nil]forKey:@"AppleLanguages"];
      [[NSUserDefaults standardUserDefaults] synchronize];
    }
}

它工作完美。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何强制应用程序更改 iOS/Objective-C 中的语言? 的相关文章

  • 如何保存 1 个 xcode 项目中的所有构建设置并在其他 xcode 项目上使用它们?

    我使用 xcode 4 5 和 cordova phonegap 来构建我的应用程序 我投入了大量时间来获取适合我的 Xcode 项目的构建设置 并且我想在我正在构建的多个应用程序上重用这些设置 我正在寻找是否有一种快速的方法来导出这些设置
  • 在 iOS 中管理和解除多个视图控制器

    我是一名 iPhone 新手程序员 在开发我的第一个游戏 应用程序时 我为自己提出了一个问题 创造了一个问题 我对此进行了研究 并认为我已经看到了答案 但我不明白如何使它们适用于我的应用程序 我有一个游戏 有几个视图控制器 欢迎 玩 高分
  • 我可以在 NS_SWIFT_NAME 中使用保留关键字吗?

    我正在尝试使 Objective C 委托协议更漂亮以便在 Swift 中使用 但我在弄清楚如何使用时遇到了一些麻烦NS SWIFT NAME 是否可以使用NS SWIFT NAME指定 Swift 名称中与 Objective C 关键字
  • 跟踪所有 ObjC 方法调用?

    有时 当查看别人的大型 Objective C 程序时 很难知道从哪里开始 在这种情况下 我认为记录对每个非 Apple 方法的每次调用会很有帮助 有没有办法做到这一点 基本上 在某个中心位置进行一项更改 并记录调用的每个方法 最好仅限于非
  • 如何等待 webViewDidFinishLoad 完成

    我有一个初始化 webView 的布尔条件 并在 webViewDidFinishLoad 中加载另一个委托 以便在完成完成后触发 但是 由于布尔值在条件 webViewDidFinishLoad 之前返回 因此页面永远不会完全加载 如何确
  • iOS 开发: [[self navigationController] viewControllers]; 有哪些原因?会返回零吗?

    以下语句返回零 NSArray viewControllersInNavStack self navigationController viewControllers 这个语句是在导航堆栈中大约四层深度的视图控制器中调用的 所以我不明白它如
  • iOS:从非图像数据生成图像(Godus,如风景)

    所以看到图像后Godus http www kickstarter com projects 22cans project godus我想知道如何生成简单的 非交互式的 2D 图像 with 不同高度或层数的颜色不同就像下面的图片一样 我只
  • UIBezierPath 的起始和结束角度?

    我在 iOS 中使用如下代码编写了半圆UI贝塞尔路径 and CAShape层 clockWiseLayer CAShapeLayer alloc init CGFloat startAngle M PI 2 CGFloat endAngl
  • iOS 内存警告

    我正在尝试使用从 Parse 数据库下载的图像填充集合视图 但我收到内存警告 然后偶尔崩溃 有谁知道其他应用程序如何设法呈现这么多图像而不崩溃 有人可以告诉我如何优化我已有的东西吗 这是所有相关代码 https gist github co
  • 从 Core Data、iOS 获取最后插入的项目

    有没有办法获取核心数据数据库中最后插入的项目 这将返回最后插入的对象 setFetchLimit 1 和 setFetchOffset 所有条目数 1
  • swift 中的负数模

    负数模如何在 swift 中工作 当我执行 1 3 时 它给出 1 但余数是 2 其中有什么问题 雨燕余数运算符 计算余数 整数除法 a b a a b b where 是截断整数除法 在你的情况下 1 3 1 1 3 3 1 0 3 1
  • 如何使用自签名证书为 TLS 创建 iOS NWConnection?

    我正在尝试将 Apple 的新 NWConnection 类用于我的 MQTT 客户端 为了进行测试 我需要能够创建到本地测试代理的 TLS 连接 该代理具有自签名证书 到目前为止 我只是使用以下命令设置连接 self connection
  • iPad 3 中配备 Xcode 4.2 和 Retina 的 iOS 5.1

    我有一台装有 Mac OS X Snow Leopard 的 Mac 我可以添加 iOS 5 1 吗 使用 iPad 3 的新分辨率 我们将如何处理图像 因为如果该应用程序将在 iPhone 3GS 4 和 iPad 3 中运行 我认为我们
  • 打印附加结构(swift 4)

    我有三个 textifled 用于将数据附加到结构中 如何打印我附加的内容 现在我收到一条错误消息 import UIKit class ViewController UIViewController IBOutlet var c UITe
  • UIImage:如何获取网站选项卡图标

    我正在开发一个 RSS 阅读器 我需要获取每个提要的图标 例如 如果我的提要是 google com 我想获取 G 图标并将其放入 UIImage 或其他内容中 关于如何实现这一目标有什么想法吗 最简单的方法是使用 Google NSStr
  • iPhone SDK - 在后台线程中运行重复进程

    我有一个iPhone我想在其中每隔一段时间在后台执行一个方法的应用程序1第二 所以在我的主线程中 我有以下代码UIViewController viewDidLoad NSTimer timerWithTimeInterval 1 0 ta
  • Objective-c中的贝塞尔曲线算法

    比我聪明的人可以看一下这个吗 我正在尝试实现我发现的贝塞尔曲线算法here http webtweakers com swag GRAPHICS 0074 PAS html在 Objective c 中 输出是错误的 我想我正确地转换了代码
  • Cognito/IAM 策略和 S3 获取对象

    我正在尝试将 S3 和 Cognito 集成到我的 iOS 应用程序中 但到目前为止尚未成功 我相信该错误与我针对 Auth 和 Unauth 用户的 IAM 策略有关 所以这是我的政策 Version 2012 10 17 Stateme
  • 如何使用 afnetworking 在后台上传任务

    我正在尝试使用 AFNetworking 上传大文件 并在应用程序处于后台时继续上传 我可以很好地上传文件 但是当我尝试使用后台配置时 应用程序崩溃并显示以下堆栈跟踪 异常 EXC BAD ACCESS 代码 1 地址 0x8000001f
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p

随机推荐

  • 如何根据日历模式创建事件?

    我正在尝试为某人创建一个 轮班 日历 我知道该模式从哪一天开始 并且我知道该模式的断断续续的日期 但我在将其翻译成代码时遇到了麻烦 他们工作4天 休息3天 工作4天 休息3天 工作4天 休息2天 如此循环 我需要创建一些逻辑来基于此为日历创
  • Material SearchView 实现错误

    我正在开发一个 Android 应用程序 现在一切都很好 但是当尝试使用 Google 指南实现 Material SearchView 并逐步遵循一些教程时 我无法弄清楚这个错误 菜单 main xml menu menu
  • 在 git repo 上工作,无需 cd 进入目录

    当我还没有在存储库上运行 git 命令时 我将如何运行cd进入那个目录 IE 我想跑git branch repos myrepo git 从 git 1 8 5 开始 使用 C option git C Users michael Dev
  • 如何在 C++ 中使用 XCode 4.2 设置 OpenGL 项目?

    我正在尝试使用 C 来了解一些图形 我认为最好从功能最强大的图形框架开始 因此我将使用 Lion 中包含的 OpenGL 基本上我在 XCode 4 2 中启动了一个 C 命令行工具 这就是我所做的一切 我需要以某种方式将 OpenGL 与
  • 为什么施特拉森矩阵乘法比标准矩阵乘法慢得多?

    I have written programs in C Python and Java for matrix multiplication and tested their speed for multiplying two 2000 x
  • 如何转换 Shapefile 的坐标?

    我正在尝试将邻居数据放入我的应用程序中 但我使用的数据存在问题 这些数据是我从here http gispub02 sfgov org website sfshare catalog realtor neighborhoods zip 该文
  • 如何在 Swift 中重写 setter

    超类 class MySuperView UIView var aProperty 子类继承超类 class Subclass MySuperClass I want to override the aProperty s setter g
  • Fluent-bit 可以解析一个文件中的多种类型的日志行吗?

    我在 k8s 中有一个相当简单的 Apache 部署 使用 Fluent bit v1 5 作为日志转发器 我的设置与下面存储库中的设置几乎相同 我正在运行 AWS EKS 并将日志输出到 AWS ElasticSearch Service
  • 更新新版本应用程序时删除sqlite数据库

    我已经上传了一个 apk 版本 1 0 其中有 22 个表SQLite数据库在 Google Play 商店上 现在我想在新版本 2 0 版 应用程序中更新包含 36 个表的数据库 我正在存储datebase在默认位置 所以当我按时 清除
  • Lua 中的 ISO 8601 时间戳

    如何将时间戳转换为 ISO 8601 格式 例如2009 01 28T21 49 59 000Z 在 Lua 中 我专门尝试使用HttpLua模块 http wiki nginx org HttpLuaModule在 Nginx 中 Try
  • JAI create 似乎使文件描述符保持打开状态

    我有一些旧代码直到最近才工作 但现在似乎很糟糕 因为它在使用 OpenJDK 6 而不是 Java SE 6 的新服务器上运行 问题似乎围绕着 JAI create 我有 jpeg 文件 我将其缩放并转换为 png 文件 这段代码过去工作时
  • ClassNotFoundException:重建后的 org.springframework.cglib.transform.impl.MemorySafeUndeclaredThrowableStrategy

    当尝试在 Tomcat 上运行我的项目时 我遇到了这个奇怪的错误 直到几天前 一切都还好 从那以后我就没有改变过任何一行代码 在一切开始失败之前我做的唯一一件事是 Maven 上下文菜单中的 更新项目 Aug 21 2013 4 39 48
  • HTML 自动嵌入最近从 YouTube 频道上传的视频

    我想知道是否有办法将最近上传的内容从 YouTube 频道自动嵌入到网站 我什至不知道从哪里开始 帮助 使用以下代码通过指定频道 ID 而不是频道名称来自动嵌入 YouTube 频道的最新视频 var channelID UC0xXUfNS
  • 是否可以在 macOS 上以编程方式更改 XDR 显示参考模式(又名预设)?

    Apple 的 XDR 显示器 例如 Pro Display XDR 和 Liquid Retina Display XDR 支持显示参考模式 也称为预设 这些可以在 系统首选项 gt 显示 gt 显示设置 gt 预设 中进行更改 选择 X
  • 在 Laravel 5.4 中将外键 bigInteger 设置为 bigIncrements

    因此 我尝试在 Laravel 的迁移文件中设置外键 以便用户表很简单 但我尝试使用 bigIncrements 而不是立场增量 public function up Schema create users function Bluepri
  • 将数据表拆分为小表 R

    我有一个下表 超过 1k 行 x1 x2 x3 x4 7809 243638 1 1 7809 243638 1 1 7809 243638 1 1 3453 222222 1 0 我需要根据第二列将此表拆分为小表 将在我的环境中作为数据框
  • 确保 CSV 输出中保留长数字

    我有一个 R 数据框 需要保存为 csv 文件 但是在保存为 csv 文件时 一个数字列会更改其格式 我有一个名为 ID 的字符列 如下所示 df lt data frame ID as character 1181050000000002
  • 将新选项卡添加到选项卡栏控制器

    我正在创建一个标签栏 iOS 应用程序 选项卡栏视图控制器有两个选项卡 每个选项卡都连接到一个视图控制器 它看起来是这样的 我需要向选项卡控制器添加更多选项卡 我在故事板中这样做如下 我添加了一个新的视图控制器 我按住 Control 键并
  • 从控制器重定向到项目外部的不同 URL

    我如何从我的控制器重定向到不同的网址 例如 yahoo com hotmail com 我正在使用 Spring 3 0 并使用配置而不是注释 我忘记提及的一件事是 url 将是用户输入 因此无法将其添加到配置中 谢谢 高卢人 您可以在控制
  • 如何强制应用程序更改 iOS/Objective-C 中的语言?

    我在让应用程序立即更改语言时遇到问题 例如this app https itunes apple com app zalo nhan tin kieu moi id579523206 mt 8 我发现了很多类似的问题this https s