NSBundle+Language.m 926 B

12345678910111213141516171819202122232425262728293031
  1. #import "NSBundle+Language.h"
  2. #import <objc/runtime.h>
  3. static const char _bundle = 0;
  4. @interface BundleEx : NSBundle
  5. @end
  6. @implementation BundleEx
  7. - (NSString *)localizedStringForKey:(NSString *)key value:(NSString *)value table:(NSString *)tableName {
  8. NSBundle *bundle = objc_getAssociatedObject(self, &_bundle);
  9. return bundle ? [bundle localizedStringForKey:key value:value table:tableName] : [super localizedStringForKey:key value:value table:tableName];
  10. }
  11. @end
  12. @implementation NSBundle (Language)
  13. + (void)setLanguage:(NSString *)language {
  14. static dispatch_once_t onceToken;
  15. dispatch_once(&onceToken, ^{
  16. object_setClass([NSBundle mainBundle], [BundleEx class]);
  17. });
  18. objc_setAssociatedObject([NSBundle mainBundle], &_bundle, language ? [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:language ofType:@"lproj"]] : nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
  19. }
  20. @end