NSBundle+BRPickerView.m 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. //
  2. // NSBundle+BRPickerView.m
  3. // BRPickerViewDemo
  4. //
  5. // Created by renbo on 2019/10/30.
  6. // Copyright © 2019 irenb. All rights reserved.
  7. //
  8. // 最新代码下载地址:https://github.com/91renb/BRPickerView
  9. #import "NSBundle+BRPickerView.h"
  10. #import "BRBaseView.h"
  11. BRSYNTH_DUMMY_CLASS(NSBundle_BRPickerView)
  12. @implementation NSBundle (BRPickerView)
  13. #pragma mark - 获取 BRPickerView.bundle
  14. + (instancetype)br_pickerBundle {
  15. static NSBundle *pickerBundle = nil;
  16. if (pickerBundle == nil) {
  17. /*
  18. 先拿到最外面的 bundle。
  19. 对 framework 链接方式来说就是 framework 的 bundle 根目录,
  20. 对静态库链接方式来说就是 target client 的 main bundle,
  21. 然后再去找下面名为 BRPickerView 的 bundle 对象。
  22. */
  23. NSBundle *bundle = [NSBundle bundleForClass:[BRBaseView class]];
  24. NSURL *url = [bundle URLForResource:@"BRPickerView" withExtension:@"bundle"];
  25. pickerBundle = [NSBundle bundleWithURL:url];
  26. }
  27. return pickerBundle;
  28. }
  29. #pragma mark - 获取城市JSON数据
  30. + (NSArray *)br_addressJsonArray {
  31. static NSArray *cityArray = nil;
  32. if (cityArray == nil) {
  33. // 获取本地JSON文件
  34. NSString *filePath = [[self br_pickerBundle] pathForResource:@"BRCity" ofType:@"json"];
  35. NSData *data = [NSData dataWithContentsOfFile:filePath];
  36. cityArray = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
  37. }
  38. return cityArray;
  39. }
  40. #pragma mark - 获取国际化后的文本
  41. + (NSString *)br_localizedStringForKey:(NSString *)key language:(NSString *)language {
  42. return [self br_localizedStringForKey:key value:nil language:language];
  43. }
  44. + (NSString *)br_localizedStringForKey:(NSString *)key value:(NSString *)value language:(NSString *)language {
  45. static NSBundle *bundle = nil;
  46. if (bundle == nil) {
  47. // 如果没有手动设置语言,将随系统的语言自动改变
  48. if (!language) {
  49. // 系统首选语言
  50. language = [NSLocale preferredLanguages].firstObject;
  51. }
  52. if ([language hasPrefix:@"en"]) {
  53. language = @"en";
  54. } else if ([language hasPrefix:@"zh"]) {
  55. if ([language rangeOfString:@"Hans"].location != NSNotFound) {
  56. language = @"zh-Hans"; // 简体中文
  57. } else { // zh-Hant、zh-HK、zh-TW
  58. language = @"zh-Hant"; // 繁體中文
  59. }
  60. } else {
  61. language = @"en";
  62. }
  63. // 从 BRPickerView.bundle 中查找资源
  64. bundle = [NSBundle bundleWithPath:[[self br_pickerBundle] pathForResource:language ofType:@"lproj"]];
  65. }
  66. value = [bundle localizedStringForKey:key value:value table:nil];
  67. return [[NSBundle mainBundle] localizedStringForKey:key value:value table:nil];
  68. }
  69. @end