How to distinguish a translation does not exist or is the translation the same as the source?

I use QCoreApplication::translate()to translate text.

I am trying to figure out if a string has a translation.

The Qt documentation says:

If none of the translation files contains a translation for sourceTextin context, this function returns the QStringequivalent sourceText.

The problem I am facing is that I get results similar to this:

<message>
    <source>Side</source>
    <translation>Side</translation>
</message>

If the source and translation match.

In many languages, the translation is really the same as the source. But if it translate("Side")returns "Side", I cannot determine if the translation was smooth "Side"or if the translation was empty.

How can I distinguish between two cases?

+4
2

AFAIK QTCoreApplication::translate.

QTranslator::translate null QString, (Qt 5). , QTranslator, installTranslator() ( QCoreApplication ). , QTranslator::translate() . , ; , , QTranslator, .

-:

bool hasTranslation(const char* key)
{
  QString result;
  if(!translators.size())
    return false;

  for(const auto& translator : translators)
  {
    result = translator->translate("context", key);
    if(!result.isNull())
      break;
  }
  return !result.isNull();
}
+3

AFAIK, . translate : , , . , . , , QString:

QString QCoreApplication::translate(const char *context, const char *sourceText,
                                    const char *disambiguation, Encoding encoding, int n)
{
    QString result;

    if (!sourceText)
        return result;

    if (self && !self->d_func()->translators.isEmpty()) {
        QList<QTranslator*>::ConstIterator it;
        QTranslator *translationFile;
        for (it = self->d_func()->translators.constBegin(); it != self->d_func()->translators.constEnd(); ++it) {
            translationFile = *it;
            result = translationFile->translate(context, sourceText, disambiguation, n);
            if (!result.isEmpty())
                break;
        }
    }

    if (result.isEmpty()) {
#ifdef QT_NO_TEXTCODEC
        Q_UNUSED(encoding)
#else
        if (encoding == UnicodeUTF8)
            result = QString::fromUtf8(sourceText);
        else if (QTextCodec::codecForTr() != 0)
            result = QTextCodec::codecForTr()->toUnicode(sourceText);
        else
#endif
            result = QString::fromLatin1(sourceText);
    }

    replacePercentN(&result, n);
    return result;
}

, , QTranslator translate() function ( translate() in QCoreApplication ).

+2

Source: https://habr.com/ru/post/1655615/


All Articles