Tipos de archivo admitidos (Strings)

.XCSTRINGS - Catálogo de cadenas de Apple (Cadenas)

El contenido se traduce automáticamente del inglés por Phrase Language AI.

Extensiones de archivo 

.xcstrings

Extensión API 

strings_catalog

Importar 

Exportar 

Compatibilidad con formularios plurales 

Compatibilidad con descripción 

Opciones de formato

Estas opciones se pueden especificar cuando se carga y/o descarga un archivo. Dependiendo del método de carga/descarga (API, CLI, sincronización de repositorios, etc.), se pueden especificar en parámetros de consulta Cargar, Descargar o en el archivo de configuración phrase.yml.

convert_placeholder

default_extraction_state

Catálogo de cadenas de Apple (.xcstrings) es un formato de localización introducido en Xcode 15. Mejora la forma en que los desarrolladores gestionan cadenas localizadas al admitir formatos estructurados para manejar la pluralización, variaciones específicas de dispositivos y más. Este formato se está convirtiendo en el enfoque recomendado para gestionar localizaciones en aplicaciones de iOS y macOS.

Los campos de metadatos comentar, estadoDeExtracción y deberíaTraducir se importan y exportan en el orden requerido para garantizar la compatibilidad con Xcode.

Phrase también mapea los estados de traducción de Xcode a los equivalentes más cercanos de Cadenas durante la importación y los convierte de nuevo a valores compatibles con Xcode en la exportación. Si no se aplica un mapeo específico, se utiliza traducido como el valor de exportación predeterminado. Si es necesario, use la opción Ignorar estado de traducción en la importación para omitir el mapeo de estado.

Ejemplo de código

{
  "sourceLanguage": "en",
  "strings": {
    "Sync Warning": {
      "comment": "Mensaje de función de sincronización no disponible",
      "localizations": {
        "en": {
          "stringUnit": {
            "state": "translated",
            "value": "La sincronización en la nube debe estar habilitada para usar esta función."
          }
        },
        "fr": {
          "stringUnit": {
            "state": "translated",
            "value": "La synchronisation cloud doit être activée pour utiliser cette fonction."
          }
        }
      }
    },
    "Chosen Collections": {
      "comment": "Título de vista que indica colecciones de fotos seleccionadas",
      "localizations": {
        "fr": {
          "variations": {
            "plural": {
              "one": {
                "stringUnit": {
                  "state": "translated",
                  "value": "%ld colección seleccionada"
                }
              },
              "other": {
                "stringUnit": {
                  "state": "translated",
                  "value": "%ld colecciones seleccionadas"
                }
              }
            }
          }
        },
        "en": {
          "variations": {
            "plural": {
              "one": {
                "stringUnit": {
                  "state": "translated",
                  "value": "%ld Colección Seleccionada"
                }
              },
              "other": {
                "stringUnit": {
                  "state": "translated",
                  "value": "%ld Colecciones Seleccionadas"
                }
              }
            }
          }
        }
      }
    },
    "Settings Hub": {
      "localizations": {
        "es": {
          "stringUnit": {
            "state": "translated",
            "value": "Centro de configuración"
          }
        }
      }
    }
  },
  "version": "1.0"
}

Al usar el Phrase CLI, las exportaciones de archivos siguen la estructura definida en el archivo de configuración .phrase.yml. Para asegurar que múltiples idiomas se exporten en un solo archivo .XCSTRINGS durante las operaciones de pull:

  • Especifica solo un objetivo de archivo en el archivo de configuración de la CLI.

  • Usa el parámetro locale_ids para listar todas las localizaciones de idioma incluidas en la exportación.

Ejemplo .phrase.yml configuración

pull:
  targets:
    - file: ./i18n-test/Localizable.xcstrings
      params:
        locale_id: en # Idioma principal para la descarga
        locale_ids: # Idiomas adicionales a incluir
          - de
          - es
          - fr 
        file_format: strings_catalog

Variaciones de dispositivo

El Catálogo de Cuerdas de Apple admite variaciones de dispositivos, lo que permite diferentes contenidos de traducción para la misma clave dependiendo del dispositivo Apple que se esté utilizando.

Para manejar las variaciones de dispositivos en las Cadenas de Frases, se crean claves separadas para cada dispositivo utilizando el separador |==|. Al importar archivos .XCSTRINGS, el tipo de dispositivo se añade al nombre base de la clave utilizando este separador.

Ejemplo

La clave llamada %lld Producto(s) Pedidos para el dispositivo applewatch se importa como una clave plural llamada %lld Producto(s) Pedidos|==|device.applewatch en las Cadenas de Frases.

Durante la exportación, las Cadenas de Frases detectan la variante del dispositivo utilizando el separador y restauran su estructura anidada original para el formato de localización de Apple.

{
  "sourceLanguage": "en",
  "strings": {
    "%lld Producto(s) Pedidos": {
      "comentario": "Indica el número de productos pedidos, con variaciones específicas del dispositivo",
      "localizations": {
        "en": {
          "variations": {
            "device": {
              "applewatch": {
                "variations": {
                  "plural": {
                    "one": {
                      "stringUnit": {
                        "state": "translated",
                        "valor": "%lld Producto pedido (Apple Watch)"
                      }
                    },
                    "other": {
                      "stringUnit": {
                        "state": "translated",
                        "valor": "%lld Productos pedidos (Apple Watch)"
                      }
                    }
                  }
                }
              },
              "ipad": {
                "variations": {
                  "plural": {
                    "one": {
                      "stringUnit": {
                        "state": "translated",
                        "valor": "%lld Producto pedido (iPad)"
                      }
                    },
                    "other": {
                      "stringUnit": {
                        "state": "translated",
                        "valor": "%lld Productos pedidos (iPad)"
                      }
                    }
                  }
                }
              },
              "iphone": {
                "variations": {
                  "plural": {
                    "one": {
                      "stringUnit": {
                        "state": "translated",
                        "valor": "%lld Producto pedido (iPhone)"
                      }
                    },
                    "other": {
                      "stringUnit": {
                        "state": "translated",
                        "valor": "%lld Productos pedidos (iPhone)"
                      }
                    }
                  }
                }
              },
              "mac": {
                "variations": {
                  "plural": {
                    "one": {
                      "stringUnit": {
                        "state": "translated",
                        "valor": "%lld Producto pedido (Mac)"
                      }
                    },
                    "other": {
                      "stringUnit": {
                        "state": "translated",
                        "value": "%lld Productos ordenados (Mac)"
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "fr": {
          "variations": {
            "plural": {
              "few": {
                "stringUnit": {
                  "state": "translated",
                  "value": "%lld producto(s) ordenado(s)"
                }
              },
              "many": {
                "stringUnit": {
                  "state": "translated",
                  "value": "%lld productos ordenados"
                }
              },
              "one": {
                "stringUnit": {
                  "state": "translated",
                  "value": "%lld producto ordenado"
                }
              }
            }
          }
        }
      }
    }
  }
}

Sustituciones de cadenas

El Catálogo de Cadenas de Apple admite sustituciones de cadenas que proporcionan marcadores flexibles para contenido dinámico.

Para manejar las sustituciones de cadenas en Cadenas de Phrase, se crean claves separadas utilizando el separador |==|. Al importar archivos .XCSTRINGS, la sustitución se añade al nombre de la clave base utilizando este separador.

Las Cadenas de Phrase también admiten la creación de cadenas de sustitución directamente en el proyecto. Cuando las estructuras de sustitución se crean manualmente, se debe definir una clave base y una clave de sustitución correspondiente para garantizar que se genere el formato anidado correcto durante la exportación.

Las sustituciones siempre requieren un formato de nomenclatura de clave específico: nombreClave|==|sustitución.[especificador].

Ejemplo: Importando estructuras de sustitución de archivos .XCSTRINGS existentes

La clave llamada alertaDeAvistamientoDeAves para la sustitución Aves se importa como una clave plural llamada alertaDeAvistamientoDeAves|==|sustitución.AVES en Cadenas de Phrase.

Durante la exportación, Cadenas de Phrase detecta la sustitución utilizando el separador y restaura su estructura anidada original para el formato de localización de Apple.

"birdSightingAlert": {
  "comentario": "Mensaje de alerta que indica el número de aves avistadas",
  "localizations": {
    "en": {
      "stringUnit": {
        "state": "new",
        "value": "¡Avistaste %#@AVES@!"
      },
      "substitutions": {
        "BIRDS": {
          "formatSpecifier": "BIRDS",
          "variations": {
            "plural": {
              "one": {
                "stringUnit": {
                  "state": "new",
                  "value": "a bird"
                }
              },
              "other": {
                "stringUnit": {
                  "state": "new",
                  "value": "varios pájaros"
                }
              },
              "zero": {
                "stringUnit": {
                  "state": "new",
                  "value": "sin pájaros"
                }
              }
            }
          }
        }
      }
    }
  }

Ejemplo: Creando cadenas de sustitución desde cero

  • Clave base

    Una clave base llamada keyName representa la cadena de formato de nivel superior que contiene el marcador de posición de sustitución %#@format@.

    Cuando se exporta, esta clave se escribe como la stringUnit principal para la entrada:

    "keyName": {
      "localizations": {
        "en": {
          "stringUnit": {
            "state": "translated",
            "value": "%#@format@"
          }
        }
      }
    }
  • Clave de sustitución

    Una cadena de sustitución se define como una clave separada utilizando el formato de nombrado de sustitución: keyName|==|substitution.li.

    Esta clave contiene el texto de sustitución, típicamente con variaciones plurales. Durante la exportación, Phrase Strings detecta la sustitución utilizando el separador |==|substitution. y restaura la estructura anidada correspondiente bajo la clave base:

    {
      "sourceLanguage": "en",
      "strings": {
        "keyName": {
          "localizations": {
            "en": {
              "stringUnit": {
                "state": "translated",
                "value": "%#@format@"
              },
              "substitutions": {
                "li": {
                  "formatSpecifier": "li",
                  "variations": {
                    "plural": {
                      "one": {
                        "stringUnit": {
                          "state": "translated",
                          "value": "%@ día"
                        }
                      },
                      "other": {
                        "stringUnit": {
                          "state": "translated",
                          "value": "%@ días"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "version": "1.0"
    }

Opciones de formato

Identificador 

convert_placeholder

Tipo 

booleano

Cargar 

No

Descargar 

Por defecto 

false

Descripción 

El marcador de posición se convertirá para cumplir con los requisitos específicos del formato. Ejemplo: $s$@, %s%@

Identificador 

default_extraction_state

Tipo 

cadena

Cargar 

No

Descargar 

Por defecto 

nulo

Descripción 

Define el valor de extractionState que se escribe en las claves del archivo exportado cuando no se ha definido un estado de extracción en la clave. Si una clave ya contiene un extractionState, su valor se preserva durante la exportación.

Compatible en:

  • descargas de UI

  • API

  • CLI (a través de la configuración .phrase.yml) y sincronización de repositorios

¿Fue útil este artículo?

Sorry about that! In what way was it not helpful?

The article didn’t address my problem.
I couldn’t understand the article.
The feature doesn’t do what I need.
Other reason.

Note that feedback is provided anonymously so we aren't able to reply to questions.
If you'd like to ask a question, submit a request to our Support team.
Thank you for your feedback.