NuevoProduct Score, 4T Segmentation, Price War y Broken Size ya están disponibles.Ver las novedades
Feedance
Artículo

Pasar a minúsculas títulos de productos turcos sin romper İ y ı: guía de reglas de feed

La conversión a minúsculas estándar convierte İZMİR en i̇zmi̇r e ISPARTA en isparta. Pruebe y corrija las reglas de títulos del feed con 5 casos de prueba.

Inci DindarInci Dindar
10 min de lectura
Product tags with one misplaced dot being inspected by a magnifier, illustrating Turkish casing errors in feed titles

Google permite títulos de producto de entre 1 y 150 caracteres y recomienda a los comerciantes no usar mayúsculas para destacar (Ayuda de Merchant Center). Los catálogos turcos exportados desde sistemas ERP suelen estar escritos en mayúsculas, así que la solución evidente es una regla que ponga en minúsculas o en formato título todos los títulos. Esa regla es justo donde los datos en turco se rompen sin hacer ruido. En nuestra prueba, una conversión a minúsculas por defecto de İZMİR ÇİZGİLİ KIŞLIK MONT devolvió 30 puntos de código en lugar de 25, y ISPARTA se convirtió en isparta en lugar de ısparta. Esta guía está dirigida a gestores de feeds y desarrolladores que trabajan con texto de producto en turco. Al terminar, podrá probar su stack, corregir la regla de mayúsculas y minúsculas y añadir una comprobación que detecte el problema en cada sincronización.

Por qué el turco rompe las reglas habituales de mayúsculas y minúsculas

El turco tiene dos pares de letras distintos: la ı sin punto con su mayúscula I, y la i con punto con su mayúscula İ. El archivo de correspondencias de mayúsculas y minúsculas de Unicode lo dice directamente: "I and i-dotless; I-dot and i are case pairs in Turkish and Azeri" (Unicode SpecialCasing.txt).

La conversión por defecto (independiente del idioma) no lo sabe. Convierte I en i, y convierte İ en i más un punto combinante superior (U+0307). Las reglas turcas del mismo archivo convierten I en ı e İ en una i simple. El azerí sigue la misma regla.

En un feed pueden fallar tres cosas:

  • Letras incorrectas. KADIN se convierte en kadin y YAĞI en yaği. La palabra sigue siendo legible, pero está mal escrita.
  • Caracteres adicionales. İZMİR se convierte en i̇zmi̇r, una cadena con dos puntos de código de más que no se ven. En pantalla parece casi correcta y no coincide con izmir en un filtro, una unión de datos o una búsqueda.
  • Mayúsculas incorrectas en sentido contrario. istanbul se convierte en ISTANBUL en lugar de İSTANBUL, y el formato título produce Iç en lugar de İç.

Paso 1: Averigüe qué hace hoy su stack

Antes de cambiar ninguna regla, compruebe cómo se comporta el código que transforma sus títulos. Pasamos las mismas dos entradas por los entornos de ejecución que usan la mayoría de los pipelines de feeds. La entrada fue ISPARTA İSTANBUL para minúsculas e istanbul ışık para mayúsculas.

Entorno y llamadaResultado en minúsculasResultado en mayúsculas¿Correcto en turco?
JavaScript toLowerCase() / toUpperCase()isparta i̇stanbulISTANBUL IŞIKNo
JavaScript toLocaleLowerCase("tr") / toLocaleUpperCase("tr")ısparta istanbulİSTANBUL IŞIKSí
Python 3.13 str.lower() / str.upper()isparta i̇stanbulISTANBUL IŞIKNo
PHP 8.3 mb_strtolower()i̇stanbul (para İSTANBUL)n/dNo
PHP 8.3 strtolower()isparta (para ISPARTA)n/dNo
Perl lc() / uc()isparta i̇stanbulISTANBUL IŞIKNo

Importan dos detalles. En primer lugar, el toLocaleLowerCase() de JavaScript sin argumento usa la configuración regional por defecto, de modo que el mismo código puede comportarse de forma distinta en un servidor y en un portátil. La documentación muestra que "İstanbul".toLocaleLowerCase("en-US") devuelve i̇stanbul y que toLocaleLowerCase("tr") devuelve istanbul (MDN). Pase siempre "tr" de forma explícita.

En segundo lugar, PHP 8.2 cambió strtolower() para que ya no dependa de setlocale() y convierta solo caracteres ASCII (manual de PHP). Configurar una configuración regional turca no cambiará esto en una versión actual.

Paso 2: Cree un conjunto de pruebas con títulos reales

Tome de 10 a 15 títulos de su propio catálogo que cubran todas las letras específicas del turco: İ, I, ı, i, Ş, Ğ, Ç, Ö, Ü. Incluya un título que empiece por I, otro que empiece por İ y otro con una unidad como ML o GB. Este es un conjunto de partida, con el resultado de la conversión a minúsculas por defecto junto al correcto.

Título originalMinúsculas por defectoMinúsculas en turco
ISPARTA GÜL YAĞI 50 MLisparta gül yaği 50 mlısparta gül yağı 50 ml
İZMİR ÇİZGİLİ KIŞLIK MONTi̇zmi̇r çi̇zgi̇li̇ kişlik montizmir çizgili kışlık mont
KADIN İÇ ÇAMAŞIRI SETİkadin i̇ç çamaşiri seti̇kadın iç çamaşırı seti
IŞIK GEÇİRMEZ PERDEişik geçi̇rmez perdeışık geçirmez perde
ÇOCUK OKUL ÇANTASIçocuk okul çantasiçocuk okul çantası

Fíjese en la última fila. Solo difiere una letra, y una revisión visual de unos pocos títulos la pasaría por alto con facilidad. Por eso el conjunto de pruebas tiene que cubrir todas las letras, y por eso se comparan cadenas, no impresiones.

Paso 3: Corrija la función de mayúsculas y minúsculas

Si su herramienta le permite elegir la configuración regional, establézcala en tr. Si no, envuelva usted mismo la transformación. En JavaScript o Node, la corrección es un solo argumento:

title.toLocaleLowerCase("tr")
title.toLocaleUpperCase("tr")

Los métodos de cadena estándar de Python no tienen argumento de configuración regional. Una solución fiable consiste en sustituir las cuatro letras especiales antes de llamar al método por defecto. Probamos esta versión con las cuatro primeras filas de arriba:

def tr_lower(s):
    return s.replace("İ", "i").replace("I", "ı").lower()

def tr_upper(s):
    return s.replace("i", "İ").replace("ı", "I").upper()

El orden importa. Sustituya primero İ e I y después pase a minúsculas. Si pasa primero a minúsculas, la información sobre cuál era la mayúscula original ya se ha perdido.

Paso 4: Trate por separado el formato título y las unidades

El formato título añade dos problemas. Poner en mayúscula la primera letra de cada palabra debe usar la mayúscula turca; de lo contrario, iç çamaşırı se convierte en Iç Çamaşırı con el title() de Python. Además, una regla general pone en mayúscula las unidades: 50 ML se convierte en 50 Ml.

El patrón que usamos es: pasar todo el título a minúsculas con la función turca, poner en mayúscula la primera letra de cada palabra con la función turca y omitir cualquier token que empiece por un dígito o que figure en una lista corta de unidades (ml, gb, cm, kg). Con ISPARTA GÜL YAĞI 50 ML esto da Isparta Gül Yağı 50 ml. Sin la lista de unidades, el mismo pipeline devuelve 50 Ml. Tenga en cuenta que Isparta es correcto: el nombre de la ciudad empieza por una I mayúscula sin punto.

Las marcas son un caso aparte. Una marca escrita en mayúsculas a propósito (IKEA, HP) necesita una lista de exclusiones, porque Google solo pide que evite las mayúsculas para destacar y que las siga usando donde corresponda, como en las abreviaturas (Ayuda de Merchant Center). Mantenga la lista corta y en el mismo lugar que la regla.

Si mantiene estas reglas en una herramienta de gestión de feeds, compruebe cómo aplica las mayúsculas y minúsculas. Las feed rules de Feedance ofrecen como opciones mayúsculas, mayúscula inicial de frase y primera letra en mayúscula, y la página no indica qué configuración regional utilizan, así que ejecutamos este conjunto de pruebas con cualquier herramienta, la nuestra incluida, antes de confiarle texto en turco. Para una visión más amplia de cuándo basta una regla y cuándo merece la pena un modelo de IA, consulte nuestra comparativa de títulos de producto basados en reglas y con IA.

Paso 5: Detecte los daños que quedan en los datos existentes

Si una regla defectuosa ya se ha ejecutado, el punto combinante está ahora en sus datos almacenados. La normalización Unicode no lo elimina: en nuestra prueba, i seguida de U+0307 siguió siendo dos puntos de código tras la normalización NFC, porque no existe una forma precompuesta en la que combinarse. Tiene que localizarlo y eliminarlo.

Esta comprobación informa de todos los títulos que contienen el punto combinante superior:

import re
bad = [t for t in titles if re.search("̇", t)]

Después de volver a ejecutar la regla corregida sobre İZMİR, la misma comprobación devuelve falso. Ejecútela sobre title, description, brand, product_type y cualquier campo custom_label, ya que las reglas de mayúsculas y minúsculas se aplican a menudo a algo más que los títulos.

Por otro lado, si un canal informa de un error de codificación, se trata de un fallo distinto. La página "Invalid UTF-8 encoding" de Merchant Center indica que la causa es un problema con la codificación del texto y le indica que declare o convierta la codificación del archivo (Ayuda de Merchant Center). El error de mayúsculas y minúsculas produce UTF-8 válido, por lo que no activará ese error. Pasa de forma silenciosa, y esa es la razón para comprobarlo.

Paso 6: Conviértalo en una barrera en cada sincronización

Una corrección que nadie vuelve a revisar acabará retrocediendo la primera vez que alguien añada una regla o cambie de herramienta. Use esta lista de comprobación como barrera de publicación para cualquier cambio en las reglas de título, descripción o nombre de categoría.

ComprobaciónCondición de superación
La configuración regional es explícitaTodas las funciones de mayúsculas y minúsculas se llaman con tr o van envueltas como se ha descrito
El conjunto de pruebas se superaTodas las filas coinciden carácter por carácter con el resultado correcto en turco
Sin punto combinanteNingún campo contiene U+0307
Unidades conservadasTokens como ml, gb, cm no se ponen en formato título
Exclusiones de marca aplicadasLas marcas de la lista conservan las mayúsculas previstas
Longitud sin cambiosEl resultado no es más largo que la entrada en puntos de código y se mantiene dentro de 150

La comprobación de longitud detecta los puntos de código adicionales que añade la conversión a minúsculas por defecto. Es una alarma muy práctica incluso si todavía no sabe qué regla causó el cambio.

Dónde falla este método

Este es un método para turco y azerí, los dos idiomas que el archivo de Unicode indica para esta regla. No cubre los campos en escritura árabe; para ellos, consulte cómo estructurar los datos de producto en árabe e inglés.

No tenemos pruebas de que Google ni ningún marketplace rechace un producto por una i con o sin punto incorrecta. Los costes documentados son indirectos: títulos mal escritos frente a los compradores y cadenas que ya no coinciden con sus filtros, uniones de datos y búsqueda interna. Trátelo como un fallo de calidad de datos, no de política.

El truco de sustitución del Paso 3 gestiona las cuatro letras especiales, pero no es una implementación completa de las reglas de mayúsculas y minúsculas de Unicode. Las bibliotecas basadas en ICU y las herramientas que exponen una opción de configuración regional cubren más casos límite que un envoltorio escrito a mano. Si una herramienta que usa ya tiene una opción correcta de configuración regional turca, utilícela y conserve solo el conjunto de pruebas. No hemos probado cómo gestionan Channable, DataFeedWatch o Productsup la configuración regional turca, así que no afirmamos nada en un sentido ni en otro; ejecute el conjunto de pruebas con ellas como lo haría con cualquier herramienta. Los marketplaces tienen además sus propias reglas de título, que tratamos en nuestras guías sobre feeds de Akakçe, Cimri, N11 y ÇiçekSepeti.

Preguntas frecuentes

¿Por qué İZMİR se convierte en i̇zmi̇r al pasarlo a minúsculas?

La conversión a minúsculas por defecto de Unicode transforma la İ mayúscula con punto en una i normal más un punto combinante superior (U+0307). La regla turca convierte la İ en una i simple. El resultado parece casi correcto en pantalla, pero contiene puntos de código adicionales.

¿Rechaza Google Merchant Center los títulos con el punto combinante?

No hemos encontrado ningún rechazo documentado por ese motivo. La cadena es UTF-8 válido, por lo que no activa el error "Invalid UTF-8 encoding". El perjuicio son los títulos mal escritos y los fallos de coincidencia en sus propias herramientas.

¿Debo enviar los títulos en mayúsculas, en minúsculas o en formato título?

Google indica que no se usen mayúsculas para destacar y que se pongan primero los detalles más importantes, ya que los usuarios normalmente solo ven los primeros 70 caracteres o menos. Tanto la mayúscula inicial de frase como el formato título con las letras turcas correctas cumplen esa pauta. Cuál convierte mejor es una prueba que debe hacer en su propia cuenta.

¿Basta con toLowerCase("tr") en JavaScript?

No. toLowerCase() no admite configuración regional. Use toLocaleLowerCase("tr") y pase la configuración regional de forma explícita, porque el valor por defecto depende del entorno.

¿Por qué setlocale no arregla strtolower de PHP?

Desde PHP 8.2, strtolower() ignora la configuración regional y convierte solo letras ASCII. mb_strtolower() gestiona texto no ASCII pero, en nuestra prueba, seguía devolviendo i̇stanbul para İSTANBUL. Aplique la sustitución de caracteres del Paso 3 antes de llamarla.

¿Puede la normalización Unicode eliminar el punto sobrante?

No. En nuestra prueba, NFC dejó i más U+0307 como dos puntos de código. Elimine el carácter de forma explícita y vuelva a ejecutar la regla de mayúsculas y minúsculas corregida sobre el texto original.

¿Afecta esto al árabe u otros idiomas?

La regla se aplica al turco y al azerí. Otros idiomas tienen sus propios problemas de mayúsculas, minúsculas y normalización, que esta guía no cubre.

¿Cuántas filas de prueba bastan?

Las suficientes para cubrir todas las letras específicas del turco y cada posición que pueden ocupar: inicio de palabra, medio, final y junto a un dígito. Para la mayoría de los catálogos son de 10 a 15 títulos. Añada una fila cada vez que aparezca un nuevo defecto en producción.

Revise su propio feed

Si quiere ver qué puntuación obtiene su feed actual en calidad de títulos y atributos, páselo por nuestra herramienta gratuita de auditoría de feeds de productos.

¿Quiere que alguien más revise su feed? Lo revisaremos con usted y le mostraremos dónde están las carencias antes de su próximo envío.
Solicitar una auditoría gratuita
Inci Dindar
Escrito por
Inci Dindar

Cofundadora de Feedance, donde aporta más de 20 años de experiencia en diseño de producto y de experiencia de usuario para definir cómo los catálogos se convierten en creatividades. Con un fuerte enfoque en unir los sistemas de diseño y la automatización, se dedica a ayudar a las marcas a escalar la calidad visual sin escalar el esfuerzo de diseño.

LinkedIn

Descubra qué
productos generan ingresos.

Conecte su feed y GA4. Mostramos Product Score, 4T, Price War y Broken Size en su propio catálogo.