plugin instalar guide from cocoapod ios localization cocoapods

ios - instalar - pod install macos



LocalizaciĆ³n y CocoaPods (3)

  1. No debe colocar ningún archivo en el proyecto Pods, porque el comando pod volverá a crear el proyecto una y otra vez.

    Así que pon los archivos de cadenas en tu propio proyecto.

  2. Si desea enviar archivos de cadena localizados en su propio Pod , debe incluirlos en un paquete y asegurarse de que el paquete se instalará en su archivo Podspec.

Por ejemplo:

def s.post_install(target) puts "/nGenerating YOURPOD resources bundle/n".yellow if config.verbose? Dir.chdir File.join(config.project_pods_root, ''YOURPOD'') do command = "xcodebuild -project YOURPOD.xcodeproj -target YOURPODResources CONFIGURATION_BUILD_DIR=../Resources" command << " 2>&1 > /dev/null" unless config.verbose? unless system(command) raise ::Pod::Informative, "Failed to generate YOURPOD resources bundle" end File.open(File.join(config.project_pods_root, target.target_definition.copy_resources_script_name), ''a'') do |file| file.puts "install_resource ''Resources/YOURPODResources.bundle''" end end end

Tengo un proyecto que utiliza CocoaPods. Como resultado, tengo un espacio de trabajo que contiene dos proyectos: el mío y Pods.

Pods contiene el código que me gustaría localizar, y he creado archivos .strings en Pod. Sin embargo, NSLocalizedString no puede cargar estas cadenas. Sospecho que esto sucede porque el archivo .strings no está en el paquete principal, pero no hay un paquete Pod, porque está compilado en una biblioteca estática.

¿Existe una mejor manera de localizar el código en un proyecto de CocoaPods que en mi proyecto principal?


Swift 2.0 :

static let kLocalizedStringNotFound = "kLocalizedStringNotFound" static func localizedStringForKey(key:String, value:String?, table:String?, bundle:NSBundle?) -> String { // First try main bundle var string:String = NSBundle.mainBundle().localizedStringForKey(key, value: kLocalizedStringNotFound, table: table) // Then try the backup bundle if string == kLocalizedStringNotFound { string = bundle!.localizedStringForKey(key, value: kLocalizedStringNotFound, table: table) } // Still not found? if string == kLocalizedStringNotFound { print("No localized string for ''/(key)'' in ''/(table)''") if let value = value { string = value.characters.count > 0 ? value : key } else { string = key } } return string; }


NSLocalizedString simplemente invoca localizedStringForKey:value:table: NSBundle, así que escribí una categoría de NSBundle para habilitar la búsqueda de varios paquetes (que en iOS son solo carpetas):

NSString * const kLocalizedStringNotFound = @"kLocalizedStringNotFound"; + (NSString *)localizedStringForKey:(NSString *)key value:(NSString *)value table:(NSString *)tableName backupBundle:(NSBundle *)bundle { // First try main bundle NSString * string = [[NSBundle mainBundle] localizedStringForKey:key value:kLocalizedStringNotFound table:tableName]; // Then try the backup bundle if ([string isEqualToString:kLocalizedStringNotFound]) { string = [bundle localizedStringForKey:key value:kLocalizedStringNotFound table:tableName]; } // Still not found? if ([string isEqualToString:kLocalizedStringNotFound]) { NSLog(@"No localized string for ''%@'' in ''%@''", key, tableName); string = value.length > 0 ? value : key; } return string; }

Luego redefiní la macro NSLocalizedString en mi archivo de prefijo:

#undef NSLocalizedString #define NSLocalizedString(key, comment) / [NSBundle localizedStringForKey:key value:nil table:@"MyStringsFile" backupBundle:AlternativeBundleInsideMain]

Lo mismo para otras macros si es necesario (es decir, NSLocalizedStringWithDefaultValue )