Sprachdateien .qm extern nutzen

Alles rund um die Programmierung mit Qt
Antworten
defenderLQ
Beiträge: 156
Registriert: 27. Juli 2006 20:53

Sprachdateien .qm extern nutzen

Beitrag von defenderLQ »

hi

ich hab ne weile language support integriert wie ich sehe
desto mehr sprachen ich habe desto mehr wird die binary immer größer
also momentan brauchen alle .qm datein 2 mb.
also 2 MB mehr...
und compilieren dauert immer läner wegen den sprachdateien.

hier meine lang.qrc im /lang ordner
<RCC>
<qresource prefix="/lang">
<file alias="de">rsm_de.qm</file>
<file alias="en">rsm_en.qm</file>
<file alias="es">rsm_es.qm</file>
<file alias="fr">rsm_fr.qm</file>
<file alias="ru">rsm_ru.qm</file>
<file alias="af">rsm_af.qm</file>
<file alias="cn_simp">rsm_cn_simp.qm</file>
<file alias="cn_trad">rsm_cn_trad.qm</file>
<file alias="gr">rsm_gr.qm</file>
<file alias="it">rsm_it.qm</file>
<file alias="jp">rsm_jp.qm</file>
<file alias="kr">rsm_kr.qm</file>
<file alias="pl">rsm_pl.qm</file>
<file alias="pt">rsm_pt.qm</file>
<file alias="tk">rsm_tr.qm</file>
<file alias="sl">rsm_sl.qm</file>
<file alias="da">rsm_dk.qm</file>
</qresource>
</RCC>
meine /lang/langsupport.cpp:

Code: Alles auswählen

#include <QTranslator>
#include <QLocale>

#include "languagesupport.h"

/** Static list of supported languages and codes. */
QMap<QString, QString> LanguageSupport::_languages;

/** Initializes the list of available languages. */
void
LanguageSupport::initialize()
{
  _languages.clear();
  _languages.insert("en",    "English");
  _languages.insert("de",    "Deutsch");

  _languages.insert("af",    "Afrikaans");
  _languages.insert("cn_simp",    "Chinese-Simple");
  _languages.insert("cn_trad",    "Chinese-Trad");
  _languages.insert("dk",    "danish");
  _languages.insert("fr",    
    QString::fromUtf8("fran\303\247ais"));
  _languages.insert("gr",    "Greek");
  _languages.insert("it",    "Italiano");
  _languages.insert("jp",    "Japanese");
  _languages.insert("kr",    "Korean");
  _languages.insert("pl",    "Polish");
  _languages.insert("pt",    "Portuguese");
  _languages.insert("ru",
    QString::fromUtf8("\320\240\321\203\321\201\321\201\320\272\320\270\320\271"));
  _languages.insert("es",    
    QString::fromUtf8("spanish"));
  _languages.insert("sl",    "slovenian");  
  _languages.insert("tr",    "Turkish");
/****
  _languages.insert("fi",    "Suomi");
  _languages.insert("zh-cn", 
    QString::fromUtf8("\347\256\200\344\275\223\345\255\227"));
***/

}

/** Returns the default language code for the system locale. */
QString
LanguageSupport::defaultLanguageCode()
{
  QString localeName = QLocale::system().name();
  QString language   = localeName.mid(0, localeName.indexOf("_"));
  if (language == "zh") {
    language += "-" + localeName.mid(localeName.indexOf("_")+1).toLower();
  }
  if (!isValidLanguageCode(language)) {
    language = "en";
  }
  return language;
}

/** Returns the language code for a given language name. */
QString
LanguageSupport::languageCode(QString languageName)
{
  return _languages.key(languageName);
}

/** Returns a list of all supported language codes. (e.g., "en"). */
QStringList
LanguageSupport::languageCodes()
{
  return _languages.keys();
}

/** Returns the language name for a given language code. */
QString
LanguageSupport::languageName(QString languageCode)
{
  return _languages.value(languageCode);
}

/** Returns a list of all supported language names (e.g., "English"). */
QStringList
LanguageSupport::languageNames()
{
  return _languages.values();
}

/** Returns a list of all supported language codes and names. */
QMap<QString, QString>
LanguageSupport::languages()
{
  return _languages;
}

/** Returns true if we understand the given language code. */
bool
LanguageSupport::isValidLanguageCode(QString code)
{
  return languageCodes().contains(code.toLower());
}

/** Sets the application's translator to the specified language. */
bool
LanguageSupport::translate(QString langCode)
{
  if (isValidLanguageCode(langCode)) {
    QTranslator *translator = new QTranslator();
    if (translator->load(QString(":/lang/") + langCode.toLower())) {
      QApplication::installTranslator(translator);
      return true;
    }
    delete translator;
  }
  return false;
}
was da geändert habe ist nun so:

code abschnitte:

Code: Alles auswählen

if (translator->load(QString("lang/") + langCode.toLower())) {
      QApplication::installTranslator(translator);
      return true;
jetztr müsste es nun vom lang ordner die .qm dateine holen
und nicht mehr intern oder?
weil so klappts bis jetzt nicht...
ich habe per build.bat

die /lang/*.qm dateien

alle dann ins

release/lang kopiert.

nun ist die binary im release und im lang die language dateien.

was nun ist muss die .pro datein die translations nun raus?

und lang.qrc auch nicht mehr auftauchen im .pro datei?
RESOURCES += gui/images.qrc lang/lang.qrc
TRANSLATIONS += \
lang/rsm_de.ts \
lang/rsm_en.ts \
lang/rsm_es.ts \
lang/rsm_fr.ts \
lang/rsm_af.ts \
lang/rsm_cn_simp.ts \
lang/rsm_cn_trad.ts \
lang/rsm_gr.ts \
lang/rsm_it.ts \
lang/rsm_jp.ts \
lang/rsm_kr.ts \
lang/rsm_pl.ts \
lang/rsm_pt.ts \
lang/rsm_ru.ts \
lang/rsm_tr.ts \
lang/rsm_dk.ts \
lang/rsm_sl.ts
[/quote]
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ich schätze mal Dein Pfad ist falsch. Den Pfad absolut bauen mit
http://doc.trolltech.com/4.2/qcoreappli ... ionDirPath
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten