En esta página

Troll Print Ejemplo

Actualización de las traducciones para versiones posteriores.

Troll Print es una aplicación de ejemplo que permite al usuario elegir la configuración de la impresora. Está disponible en dos versiones: Inglés y portugués.

Captura de pantalla de la interfaz de usuario de ejemplo de Troll Print en inglés

Hemos incluido un archivo de traducción, trollprint_pt.ts, que contiene algunas traducciones al portugués para este ejemplo.

Consideraremos dos versiones de la misma aplicación: Troll Print 1.0 y 1.1. Aprenderemos a reutilizar las traducciones creadas para una versión en una versión posterior. (En este tutorial, necesitará editar algunos archivos fuente. Probablemente sea mejor copiar todos los archivos a un nuevo directorio temporal y trabajar desde allí).

Consulte el ManualQt Linguist para más información sobre la traducción de aplicaciones Qt.

Recorrido línea por línea

La clase PrintPanel está definida en printpanel.h.

class PrintPanel : public QWidget
{
    Q_OBJECT

PrintPanel es un QWidget. Necesita la macro Q_OBJECT para que tr() funcione correctamente.

El archivo de implementación es printpanel.cpp.

PrintPanel::PrintPanel(QWidget *parent)
    : QWidget(parent)
{
/*
    QLabel *label = new QLabel(tr("<b>TROLL PRINT</b>"));
    label->setAlignment(Qt::AlignCenter);
*/

Parte del código está comentado en Troll Print 1.0; lo descomentarás más adelante, para Troll Print 1.1.

    twoSidedGroupBox = new QGroupBox(tr("2-sided"));
    twoSidedEnabledRadio = new QRadioButton(tr("Enabled"));
    twoSidedDisabledRadio = new QRadioButton(tr("Disabled"));
    twoSidedDisabledRadio->setChecked(true);

    colorsGroupBox = new QGroupBox(tr("Colors"));
    colorsEnabledRadio = new QRadioButton(tr("Enabled"));
    colorsDisabledRadio = new QRadioButton(tr("Disabled"));

Observe las dos apariciones de tr("Enabled") y de tr("Disabled") en PrintPanel. Dado que tanto "Enabled "s como "Disabled "s aparecen en el mismo contexto Qt Linguist sólo mostrará una aparición de cada uno y utilizará las mismas traducciones para los duplicados que no muestre. Aunque esto ahorra tiempo, en algunos idiomas, como el portugués, la segunda aparición requiere una traducción independiente. Veremos cómo Qt Linguist para que muestre todas las apariciones con traducción separada.

El archivo de cabecera para MainWindow, mainwindow.h, no contiene sorpresas. En la implementación, mainwindow.cpp, tenemos algunos textos fuente visibles para el usuario que deben ser marcados para su traducción.

    setWindowTitle(tr("Troll Print %1").arg(version));

Debemos traducir el título de la ventana.

void MainWindow::createActions()
{
    exitAct = new QAction(tr("E&xit"), this);
    exitAct->setShortcut(tr("Ctrl+Q", "Quit"));
    connect(exitAct, &QAction::triggered, this, &MainWindow::close);

    aboutAct = new QAction(tr("&About"), this);
    aboutAct->setShortcut(Qt::Key_F1);
    connect(aboutAct, &QAction::triggered, this, &MainWindow::about);

    aboutQtAct = new QAction(tr("About &Qt"), this);
    connect(aboutQtAct, &QAction::triggered, qApp, &QApplication::aboutQt);
}

void MainWindow::createMenus()
{
    QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
    fileMenu->addAction(exitAct);

    menuBar()->addSeparator();

    QMenu *helpMenu = menuBar()->addMenu(tr("&Help"));
    helpMenu->addAction(aboutAct);
    helpMenu->addAction(aboutQtAct);
}

También tenemos que traducir las acciones y los menús. Nótese que la forma de dos argumentos de tr() se utiliza para el acelerador de teclado, "Ctrl+Q", ya que el segundo argumento es la única pista que tiene el traductor para indicar qué función realizará ese acelerador.

    QTranslator translator;
    if (translator.load(locale, u"trollprint"_s, u"_"_s))
        app.installTranslator(&translator);

La función main() en main.cpp es la misma que la del ejemplo de Arrow Pad. En concreto, elige un archivo de traducción basándose en la configuración regional actual.

Ejecutar Troll Print 1.0 en inglés y en portugués

Utilizaremos las traducciones del archivo trollprint_pt.ts que se proporciona.

Establezca la variable de entorno LANG en pt y ejecute trollprint. Debería seguir viendo la versión en inglés. Ahora ejecute lrelease, por ejemplo lrelease trollprint.pro, y ejecute de nuevo el ejemplo. Ahora debería ver la edición en portugués (Troll Imprimir 1.0):

Captura de pantalla de la interfaz de usuario de troll print en portugués

Aunque la traducción ha aparecido correctamente, en realidad es incorrecta. En buen portugués, la segunda ocurrencia de "Enabled" debería ser "Ativadas", no "Ativado" y la terminación para la segunda traducción de "Disabled" debe cambiar de forma similar también.

Si abre trollprint_pt.ts con Qt Linguistverá que sólo hay una aparición de "Enabled" y de "Disabled" en el archivo fuente de la traducción, aunque hay dos de cada una en el código fuente. Esto se debe a que Qt Linguist intenta minimizar el trabajo del traductor utilizando la misma traducción para textos fuente duplicados. En casos como éste, en los que una traducción idéntica es errónea, el programador debe desambiguar las apariciones duplicadas. Esto se consigue fácilmente utilizando la forma de dos argumentos de tr().

Podemos determinar fácilmente qué archivo debe modificarse porque el "contexto" del traductor es, de hecho, el nombre de la clase en la que aparecen los textos que deben modificarse. En este caso el fichero es printpanel.cpp, donde hay cuatro líneas que cambiar. Añada el segundo argumento "two-sided" en las llamadas correspondientes de tr() al primer par de botones de opción:

twoSidedEnabledRadio = new QRadioButton(tr("Enabled", "two-sided"));
twoSidedDisabledRadio = new QRadioButton(tr("Disabled", "two-sided"));

y añada el segundo argumento "colors" en las llamadas apropiadas de tr() para el segundo par de botones de opción:

colorsEnabledRadio = new QRadioButton(tr("Enabled", "colors"), colors);
colorsDisabledRadio = new QRadioButton(tr("Disabled", "colors"), colors);

Ahora recompile, ejecute lupdate y abra trollprint_pt.ts con Qt Linguist. Ahora debería ver dos cambios.

En primer lugar, el archivo fuente de traducción contiene ahora tres pares "Enabled", "Disabled". El primer par está marcado con "(obs.)", lo que significa que están obsoletos. Esto se debe a que estos textos aparecían en llamadas a tr() que han sido sustituidas por nuevas llamadas con dos argumentos. El segundo par tiene como comentario "dos caras" y el tercero "colores". Los comentarios aparecen en la zona Source text and comments en Qt Linguist.

En segundo lugar, los textos de traducción "Ativado" y "Desativado" se han utilizado automáticamente como traducciones para los nuevos textos "Enabled" y "Disabled", de nuevo para minimizar el trabajo del traductor. Por supuesto, en este caso no son correctas para la segunda aparición de cada palabra, pero proporcionan un buen punto de partida.

Cambia el segundo "Ativado" por "Ativadas" y el segundo "Desativado" por "Desativadas", luego guarda y sal. Ejecute lrelease para obtener un archivo binario trollprint_pt.qm actualizado, y ejecute Troll Print (o más bien Troll Imprimir).

Captura de pantalla de la huella del trol en portugués

El segundo argumento de las llamadas a tr(), llamado "comentarios" en Qt Linguistdistinguen entre textos fuente idénticos que aparecen en el mismo contexto (clase). También son útiles en otros casos para dar pistas al traductor, y en el caso de los aceleradores de tecla Ctrl son el único medio de transmitir al traductor la función que realiza el acelerador.

Otra forma de ayudar al traductor es proporcionarle información sobre cómo navegar hasta la parte concreta de la aplicación que contiene los textos de origen que debe traducir. Esto les ayuda a ver el contexto en el que aparece la traducción y también a encontrar y probar las traducciones. Esto puede conseguirse utilizando un comentario TRANSLATOR en el código fuente:

/*
   TRANSLATOR MainWindow

   In this application the whole application is a MainWindow.
   Choose Help|About from the menu bar to see some text
   belonging to MainWindow.

   ...
*/

Pruebe a añadir estos comentarios a algunos archivos fuente, en particular a las clases de diálogo, describiendo la navegación necesaria para llegar a los diálogos. También puedes añadirlos a los archivos de ejemplo, por ejemplo mainwindow.cpp y printpanel.cpp son archivos apropiados. Ejecute lupdate y después inicie Qt Linguist y cargue trollprint_pt.ts. Debería ver los comentarios en el área Source text and comments mientras navega por la lista de textos fuente.

A veces, sobre todo con programas grandes, puede resultar difícil para el traductor encontrar sus traducciones y comprobar que son correctas. Los comentarios que proporcionan una buena información de navegación pueden ahorrarles tiempo:

/*
   TRANSLATOR ZClientErrorDialog

   Choose Client|Edit to reach the Client Edit dialog, then choose
   Client Specification from the drop down list at the top and pick
   client Bartel Leendert van der Waerden. Now check the Profile
   checkbox and then click the Start Processing button. You should
   now see a pop up window with the text "Error: Name too long!".
   This window is a ZClientErrorDialog.
*/

Troll Print 1.1

Ahora vamos a preparar la versión 1.1 de Troll Print. Inicie su editor de texto favorito y siga estos pasos:

  • Descomente las dos líneas que crean un QLabel con el texto "<b>TROLL PRINT</b>" en printpanel.cpp.
  • Ordena las palabras: Sustituya "2 caras" por "Dos caras" en printpanel.cpp.
  • Sustituya "1.0" por "1.1" en todos los lugares donde aparece en mainwindow.cpp.
  • Actualizar el año de copyright a 1999-2000 en mainwindow.cpp.

(Por supuesto, el número de versión y el año de copyright serían consts o #defines en una aplicación real).

Una vez terminado, ejecute lupdate, luego abra trollprint_pt.ts en Qt Linguist. Los siguientes elementos son de especial interés:

  • PrintPanel
    • 2 caras - marcado "(obs.)", obsoleto
    • <b>TROLL PRINT</b> - sin marcar, es decir, sin traducir
    • A dos caras - sin marcar, es decir, sin traducir.

Para facilitar las revisiones, en lugar de tr("Troll Print 1.0") puedes usar tr("Troll Print %1").arg("1.0") o similar para evitar tener que actualizar la cadena en cada versión.

Repasa las traducciones en MainWindow y márcalas como "hechas". Traduce "<b>TROLL PRINT</b>" como "<b>TROLL IMPRIMIR</b>". Cuando estés traduciendo "Two-sided", pulsa el botón Guess Again para traducir "Dos caras", pero cambia el "2" por "Dois".

Guarda y sal, luego ejecuta lrelease. La versión portuguesa debería tener este aspecto:

Captura de pantalla de la huella del trol en portugués

Escoge Ajuda|Sobre (Help|About) para ver el cuadro acerca de.

Si elige Ajuda|Sobre Qt (Help|About Qt), obtendrá un cuadro de diálogo en inglés. ¡Oops! Qt necesita ser traducido. Ver Internacionalización con Qt para más detalles.

Ahora ponga LANG=en para obtener la versión original en inglés:

Captura de pantalla que muestra la huella del trol en inglés

Proyecto de ejemplo @ code.qt.io

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.