¿Es posible actualizar las cadenas de un guión gráfico localizado?

226

Localicé una parte de mi aplicación creando un storyboard base.lproj y 3 archivos de cadena para él. Fue hace un mes y luego agregué un nuevo controlador de vista a la aplicación, pero los botones y etiquetas de este controlador no aparecen en los archivos de cadena

¿Es posible actualizar estos 3 archivos de cadena adjuntos al guión gráfico o debo agregar nuevas traducciones de cadenas mediante programación usando NSLocalizableString y Localizable.strings?

GeLB
fuente

Respuestas:

264

Hay dos opciones:

Opción 1

Xcode puede "recargar" el archivo convirtiéndolo en un tipo de archivo [Interface Builder Cocoa Touch Storyboard] o en un tipo de archivo [Cadenas localizables] .

  1. Seleccione su archivo base de guión gráfico del Navegador de proyectos
  2. Encuentra la sección de Localización en el Inspector de archivos
  3. Si su archivo es actualmente [Cadenas localizables], cámbielo a [Story Builder Cocoa Touch Storyboard] o viceversa.
  4. Xcode debería haber convertido su guión gráfico a la versión actual, al tiempo que conserva sus antiguos esfuerzos de localización. Aquí puede volver a cambiar el archivo al tipo de archivo original si lo desea.

opcion 2

Use ibtool para extraer las cadenas en su guión gráfico.

  1. Abre la aplicación Terminal

  2. Localice su directorio Base.lproj

  3. Use esta línea para extraer las cadenas:

    ibtool MainStoryboard.storyboard --generate-strings-file file_name.strings

  4. Después de que ibtool extraiga las cadenas en file_name.strings, puede copiarlo y pegarlo en su archivo .strings original

Visite para más información: https://conyac.cc/business/columns/localization_guide_ios

Tha Leang
fuente
1
Intenté la Opción 1, pero cambiar el tipo de archivo de [Cadenas localizables] a [Story Builder Cocoa Touch Storyboard] siempre produce un bloqueo de Xcode 5.0.1. La razón podría ser que, debido a que no conocía las posibilidades anteriores, edité los archivos de localización del guión gráfico a mano anteriormente.
Reinhard Männer
16
La opción 1 funciona. Pero debe cambiar de "Localizable .." a "interfaz ..." y luego de nuevo.
João Nunes
3
La opción 1 no funciona para mí usando XCode 6.0.1. Al intentar convertir mi archivo .strings a .interfacebuilder, XCode pregunta si los archivos deben convertirse. Los archivos se crean en el sistema de archivos, sin embargo, los archivos de cadena aún permanecen y contienen los valores antiguos.
Bouncing Bit
53
Para mí, la Opción 1 reemplazó todas las cadenas ya traducidas por las inglesas. Tuve que agregar la traducción una vez más.
Mihail Velikov
55
La opción 1 parece muy inestable en Xcode 7. A veces funciona, a veces no. A veces reemplaza al azar algunas de mis cadenas ya traducidas con versiones en inglés nuevamente.
Adam Johns
76

Echa un vistazo a BartyCrouch , resuelve perfectamente tu problema. También es de código abierto , se mantiene activamente y se puede instalar e integrar fácilmente dentro de su proyecto.


Instale BartyCrouch a través de Homebrew :

brew install bartycrouch

Alternativamente, instálelo a través de Mint :

mint install Flinesoft/BartyCrouch

Actualizar de forma incremental su storyboards / archivos XIBs Cuerdas:

$ bartycrouch update

Esto hará exactamente lo que estabas buscando.


Para mantener actualizados sus archivos de Storyboards / XIBs Strings con el tiempo, le recomiendo agregar un script de compilación (instrucciones sobre cómo agregar un script de compilación aquí ):

if which bartycrouch > /dev/null; then
    bartycrouch update -x
    bartycrouch lint -x
else
    echo "warning: BartyCrouch not installed, download it from https://github.com/Flinesoft/BartyCrouch"
fi

Además de actualizar gradualmente sus archivos de Storyboards / XIBs Strings, también se asegurará de que sus Localizable.stringsarchivos se mantengan actualizados con las claves recién agregadas en el código NSLocalizedStringy muestren advertencias para claves duplicadas o valores vacíos.

Asegúrese de pagar BartyCrouch en GitHub o este artículo detallado para obtener información adicional.

Jeehut
fuente
1
¡Guauu! Esta herramienta es simplemente asombrosa. ¡Esto necesita más votos a favor!
ph1lb4
1
herramienta encantadora: no más copia / pegado manual de nuevos textos de etiquetas en archivos * .strings (... y olvidando la traducción de cualquier etiqueta nueva como antes) ... ¡Muchas gracias!
iKK
¿Hay un pod similar para proyectos OBJC?
rickrvo
2
Esta es la respuesta que estamos buscando. Esta debería ser la respuesta aceptada.
Juanjo
3
No entiendo por qué después de 6 años desde que se hace esta pregunta y aún se requiere esta solución irregular para que esto funcione en Xcode. Apple debería haber trabajado en esto.
Huggie
57

Puede agregar manualmente una clave en su archivo de localización. Puede encontrar el objeto clave seleccionándolo en el editor de guiones gráficos. Echemos un vistazo al Object-IDinspector de identidad. Parece"nwc-b2-19c"

En su actualización de localización o agregue traducción. Por ejemplo :

"nwc-b2-19c.title" = "Translated title";
Sébastien REMY
fuente
8
creo que es el enfoque menos arriesgado
Nicolas Manzini
Pero algunos de los ID de objeto no se muestran en el archivo .string. Porque no están conectados. Entonces, en ese momento, ¿qué puedo hacer?
Mihir Oza
¿hay alguna manera de seleccionarlo a través de un nombre y no solo la identificación automática generada?
cocoseis
Para un UILabel, es: "YeB-ap-Wkw.text" = "El texto de mis etiquetas";
ioopl
30

Este no es para todos, pero no requiere herramientas adicionales en el terminal y es fácil para pequeños cambios manuales. (No considere esto cuando quiera automatizar su proceso).

Paso 0: configuración del idioma del guión gráfico

  • Base (con textos en inglés)
  • Inglés (el archivo de cadenas localizables no existe porque el archivo base es inglés)
  • otros idiomas (archivos de cadenas localizables)

Configuración Base

Este paso se realiza solo una vez.

Ahora cuando agrego algo al guión gráfico hago lo siguiente

Paso 1: agregue el archivo de cadenas localizables en inglés

Agregar inglés

solo marque la línea de pedido en inglés.

Esto crea un archivo de cadenas localizable en inglés completamente nuevo con todas las líneas

Paso 2: copie las nuevas líneas de pedido en los archivos de otros idiomas

y traducirlos

Paso 3: desmarca el inglés, elimina el archivo de cadenas localizables correspondiente

el archivo solo era necesario para obtener las nuevas líneas de pedido

Este es un proceso fácil y rápido, todo se hace en el editor de guiones gráficos

Editar:

Este proceso funciona muy bien con pequeños guiones gráficos. Por ejemplo, tengo un proyecto basado en pestañas y tengo un guión gráfico para cada pestaña.

Busque "referencia del guión gráfico" para encontrar tutoriales.

Buen ejemplo: referencia del guión gráfico en Xcode, ¿dónde deberíamos usarlo?

Por lo tanto, cada pequeño guión gráfico solo tiene algunas cadenas para localizar.

Gerd Castan
fuente
¡Excelente! ¿También encontraste una idea sobre cómo eliminar elementos eliminados?
Tobe
@Tobe Si divide su guión gráfico como sugiero anteriormente, es realmente fácil detectar las cadenas que ya no se usan.
Gerd Castan
15

Finalmente, mi solución fue (rudimentaria pero efectiva) copiar las traducciones anteriores y pegarlas en el nuevo archivo creado al desmarcar y marcar la casilla Idioma de localización.

Esto sería útil en algunos casos como el mío cuando tiene que cambiar solo uno o dos textos.

jpl850
fuente
¿Conservaría esto las identificaciones y todo el tiempo? Hice una prueba y pareció funcionar, pero podría ser un desastre si la identificación ha cambiado.
ullstrm
Creo que sí, lo he hecho muchas veces sin ningún problema.
jpl850
1
Las ID se asignan cuando suelta los elementos de la interfaz de usuario. Son independientes de la localización, ya que se asignan por storyboard. Por lo tanto, no habrá efecto en las ID.
iBug
Gracias iBug por la explicación =)
jpl850
14

Creo que la mejor manera es utilizando localizaciones de exportación / importación incorporadas:

  1. En Project Navigator, elija su carpeta de proyecto
  2. Elija Editor> Exportar para localización,
  3. Todas las traducciones que quedan en sus lugares y XCode agregan cadenas perdidas automáticamente. Además, antes de importar, puede editar .xliff en XLIFF Editor (por ejemplo, en línea: http://xliff.brightec.co.uk ) y luego no necesita hacerlo en XCode.
  4. luego Editor> Importar localizaciones y elija el archivo .xliff guardado.

PD: si no desea editar en XLIFF Editor y ha omitido el paso 3, XCode no puede guardar nuevas cadenas. En este caso, abra .xliff en XLIFF Editor, vuelva a guardar sin cambios e importe un archivo nuevo.

Igor
fuente
1
+1 Forma fácil y adecuada de trabajar con localización. Además, es preferible ser Apple
Jurásico
1
Usando Xcode 7.3.1, en un proyecto de muestra ya localizado, cambié una etiqueta (de "un texto" a "un texto básico") y agregué una nueva etiqueta. Exporté para localización, toqué el archivo .xliff (sin cambios) y lo importé nuevamente. En el archivo Main.strings, la línea de comentarios para la etiqueta modificada se ha actualizado /* Class = "UILabel"; text = "a basic text"; ObjectID = "HFW-aN-MTb"; */, pero la nueva etiqueta NO se crea en el archivo Main.strings. Luego edité el archivo .xliff para agregar una traducción para la nueva etiqueta. Lo importé de nuevo. La nueva etiqueta ahora se inserta en el archivo Main.strings.
holandés
+1 pero hay un error que he descubierto. Al agregar nuevos elementos, no están en un archivo exportado (como dice duthen). Pero cuando realizo una exportación justo después (sin cambios en el guión gráfico), sorprendentemente, se incluyen todos los elementos agregados. Entonces haga una exportación dos veces. El segundo incluirá todos los elementos nuevos. Gracias Apple!
Viktor Kucera
6

Cuando hace clic en su guión gráfico, Main.storyboard, por ejemplo ... En el lado derecho puede ver el menú de localización (ver imagen adjunta). Si desmarca y vuelve a verificar un idioma, el archivo se generará nuevamente. Por lo general, copio el contenido, genero el archivo nuevamente y luego pego el contenido que copié y que ya he traducido.

Esta es la forma en que uso para actualizar el diccionario.

ingrese la descripción de la imagen aquí

J. Fdez
fuente
¡Con Xcode 10 si usa git, resalta las diferencias!
Ricardo Ruiz Romero
Sí, es posible ... ahora mi archivo es más grande que en esta fecha y lo fusiono con la versión del repositorio después de generarlo nuevamente.
J. Fdez
5

Tengo un gran guión gráfico con muchas cadenas allí. Dos idiomas base inglés y otro árabe. La tarea consistía en agregar algunos campos y etiquetas al guión gráfico y agregar localización para ellos sin ningún script y NSLocalizableStrings.

Para mí ayudó a continuación:

Primero : asegúrese de tener git para evitar cambios inesperados.

  1. Vaya a la pantalla de destino en xcode y presione Editor-> Export For Localization.... Guarde el archivo ar.xliff en alguna parte.
  2. Descargar XLIFF Edtior .
  3. Abra el archivo ar.xliff y realice cambios.
  4. Importa este archivo en xcode. ¡Hecho! Has actualizado el archivo de cadenas del guión gráfico.
Nik Kov
fuente
Para que esto funcione, primero seleccione el proyecto u objetivo en el editor de proyectos Xcode.
Chuck Boris
4

Hay una aplicación, una herramienta de línea de comandos de Apple llamada AppleGlot que admite la localización incremental. Todavía no lo he probado, pero se ve exactamente como la herramienta que buscaste (hace algún tiempo).

tilo
fuente
La appleglotherramienta está trabajando con paquetes de aplicaciones finales. Es un enfoque completamente diferente para las aplicaciones de traducción.
Flovdis
1
¿Algo mal con un "enfoque diferente", o qué causa el voto negativo?
tilo
Necesito buscar AppleGlot en ese enlace ahora.
NSDeveloper
4

Aquí hay un guión para extraer cadenas de guiones gráficos y xibs, y fusionarlos con las traducciones existentes.

Para ejecutar el script automáticamente cuando crea un proyecto, colóquelo en el directorio raíz del proyecto y agregue una fase Ejecutar script con la siguiente línea a las fases de compilación de destino en la configuración del proyecto.

./mergegenstrings.py PathToSourceDir

O puede ejecutar el script en la Terminal manualmente cuando lo desee.

El guión se ejecuta ibtoolcuando Tha Leang respondió. También se ejecuta genstringspara extraer y combinar cadenas marcadas con NSLocalizedStringsu código fuente. El script se basa en un script de esta publicación , que combina cadenas después de ejecutarse genstrings.

Yoichi Tagaya
fuente
¿Puedes proporcionar más información sobre cómo usar esto?
user023
1
Agregué un comentario a la esencia. Espero eso ayude. gist.github.com/yoichitgy/29bdd71c3556c2055cc0
Yoichi Tagaya
Gracias, funciona perfectamente para mi. Si alguien tiene problemas con los permisos, esto podría ser útil: stackoverflow.com/questions/9850936/…
iCode
Este script funciona bien para los archivos Main.strings del guión gráfico, pero parece estar sobrescribiendo mis traducciones de Localizable.strings en Xcode 7.
Adam Johns
3

El enfoque más fácil y menos arriesgado es, simplemente copie la ID del objeto del guión gráfico y agregue una nueva clave para la clave en el archivo localizado como el siguiente ejemplo:

1: Copie la identificación del objeto como se muestra a continuación del guión gráfico para el componente:

ingrese la descripción de la imagen aquí

2: Agregue una nueva clave en el archivo localizado como a continuación:

"DjF-dn-0ay.text" = "Borrar datos y restablecer";

Nota: este enfoque es mucho menos arriesgado si desea actualizar solo unos pocos componentes; de lo contrario, puede volver a crear el archivo localizado para el guión gráfico.

Alok
fuente
¡¡¡¡¡Gracias por tu respuesta!!!!!. Tengo una pregunta que hacer, en mis proyectos, no he creado una salida para algunas de las etiquetas, botones ... Si uso objectID para esos botones y etiquetas, ¿es suficiente?
Harikarthick K
3

Xlifftool está disponible como una aplicación para Mac y funciona bien. Muestra todas las cadenas y objetos traducibles de info.plist, cadenas localizables y el guión gráfico.

Consíguelo aquí para Mac: https://itunes.apple.com/lv/app/xlifftool/id1074282695?mt=12

Paso 1: en Xcode, seleccione su carpeta de proyecto en el navegador de proyectos. Luego seleccione Editor / Exportar para localización ...

Sus cadenas traducibles se incluirán en un archivo xliff en el idioma que seleccionó para la localización en Xcode.

Paso 2: Abra ese archivo con xlifftool y traduzca o actualice sus traducciones que se realizaron anteriormente.

Paso 3: luego cárguelo nuevamente en su proyecto con Editor / Importar localizaciones ...

TM Lynch
fuente
Otra alternativa para macOS es Loca Studio . Al igual que Xlifftool, la aplicación puede abrir el resultado del editor de acciones de Xcode -> Exportar para localización. Tiene algunas funciones más avanzadas de filtrado y búsqueda, y también verificaciones automáticas de control de calidad. (divulgación completa: soy el desarrollador principal).
guru_meditator
0

Esta es mi manera fácil de actualizar el nuevo texto del guión gráfico o xib a la cadena de localización

1- usa este script http://tredje.se/dev/trouble/?x=entry:entry150917-204052

2- selecciona tu cadena de localización que desea actualizar y cambie la cadena de idioma de "Cadena de localización" a "guión gráfico del generador de interfaces"

3- vuelve a cambiar :)

Hecho.

ingrese la descripción de la imagen aquí

Fadi Abuzant
fuente
Cambia el archivo a Story Builder Storyboard, pero nuevamente después de 1 o 2 segundos lo revierte a Cadenas localizables y no agrega a Cadenas localizables para texto de nueva vista
Mujahid Latif
@MujahidLatif estoy usando esta vaina en este momento, es muy útil para mí y es puede actualizar localizaciones storyboard y Localization.String como voluntad github.com/Flinesoft/BartyCrouch
Fadi Abuzant
0

La opción 1
Xcode puede "recargar" el archivo convirtiéndolo en un [Interface Builder Cocoa Touch Storyboard]tipo de archivo o un [Localizable Strings]tipo de archivo.

Seleccione su archivo de guión gráfico base del Navegador de proyectos Busque la sección Localización en el Inspector de archivos . Si su archivo es actualmente un [Localizable Strings], cámbielo a [Interface Builder Cocoa Touch Storyboard]o viceversa.
Xcode debería haber convertido su guión gráfico a la versión actual, al tiempo que conserva sus antiguos esfuerzos de localización. Aquí puede volver a cambiar el archivo al tipo de archivo original si lo desea.

Opción 2
Úselo ibtoolpara extraer las cadenas en su guión gráfico.

Abra la aplicación Terminal
Localice su Base.lprojdirectorio
Use esta línea para extraer las cadenas:

ibtool MainStoryboard.storyboard --generate-strings-file file_name.strings

Después de que ibtool extraiga las cadenas file_name.strings, puede copiarlas y pegarlas en su .stringsarchivo original .

Pvt de software de amplio trabajo. Limitado.
fuente