J'ai donc créé des traductions pour N
langues (en utilisant Qt linguist). Je veux compiler mon application en N
applications qui diffèrent par le préfixe comme _en_US
ou _fr_FR
intégrant dans chacune des chaînes traduites. Aussi, je veux garder une version de l'application qui déterminera automatiquement la langue de la plate-forme actuelle ayant toutes les versions de traduction à l'intérieur. Comment dois-je changer mon fichier .pro
pour obtenir de tels résultats?est-il possible de compiler des applications séparées pour chaque langue dans Qt?
Répondre
Je pense qu'il est beaucoup plus facile d'intégrer toutes les traductions et de décider à l'exécution lequel charger. Peut-être que vous pouvez fournir un commutateur de ligne de commande ou une option pour remplacer les paramètres régionaux du système. Vous n'avez même pas à les intégrer dans l'exécutable, vous pouvez les envoyer dans un répertoire "translations". Pour obtenir les paramètres régionaux du système lors de l'exécution vous pouvez utiliser QLocale classe:
Application application(argc, argv);
QString locale = QLocale::system().name();
QString translationsDir = ":/translations";
QTranslator appTranslator;
QTranslator qtTranslator;
appTranslator.load(locale, translationsDir);
qtTranslator .load("qt_" + locale,
QLibraryInfo::location(QLibraryInfo::TranslationsPath));
application.installTranslator(& appTranslator);
application.installTranslator(& qtTranslator);
Quoi qu'il en soit, si vous voulez vraiment faire de votre façon, vous pouvez compter sur une variable d'environnement LANGUAGE_ID
pour détecter quelle langue à intégrer dans votre construction, puis reconstruisez votre projet pour chacune des langues disponibles . Cela peut prendre beaucoup de temps, mais peut-être que vous ne pouvez le faire que pour la version finale de .
est un exemple:
#include <iostream>
int main(int argc, char *argv[])
{
#ifdef EMBED_ONLY_ONE_LANGUAGE
std::cout << "Embedded language is " << LANGUAGE_ID << std::endl;
#elif EMBED_ALL_LANGUAGES
std::cout << "Embedded all languages" << std::endl;
#else
std::cout << "What???" << std::endl;
#endif
}
Et voici le fichier .pro:
TEMPLATE = app
DEPENDPATH += .
INCLUDEPATH += .
TARGET = SomeName
CONFIG -= qt
CONFIG += console
# Input
SOURCES += main.cpp
# It seems that "equals" does not work with environment variables so we
# first read it in a local variable.
LANGUAGE_ID=$$(LANGUAGE_ID)
equals(LANGUAGE_ID,) {
# No language id specified. Add the build instructions to embed all the
# translations and to decide at runtime which one to load.
message(No language id specified)
# This adds a preprocessor variable so that the program knows that it has
# every language.
DEFINES *= EMBED_ALL_LANGUAGES
} else {
# A language id was specified. Add the build instructions to embed only
# the relative translation.
message(Specified language id: $$LANGUAGE_ID)
# This adds a preprocessor variable LANGUAGE_ID whose value is the language.
DEFINES *= LANGUAGE_ID=\\\"$$LANGUAGE_ID\\\"
# This adds a preprocessor variable so that the program knows that it has
# only one language.
DEFINES *= EMBED_ONLY_ONE_LANGUAGE
# This renames the executable.
TARGET=$${TARGET}_$$(LANGUAGE_ID)
}
Il utilise les test function equals
sans papier. Notez que si vous modifiez la valeur de la variable d'environnement LANGUAGE_ID
, vous devez à nouveau exécuter qmake (éventuellement après avoir supprimé les Makefiles).
A (peut-être mieux) alternative est d'utiliser CMake et spécifier l'ID de langue une variable de ligne de commande de CMake:
cmake_minimum_required(VERSION 2.6)
project(SomeName)
set(SOURCES main.cpp)
add_executable(SomeName ${SOURCES})
if(${LANGUAGE_ID} MATCHES "[a-z][a-z]_[A-Z][A-Z]")
# A language id was specified. Add the build instructions to embed only
# the relative translation.
message("Embedding language ${LANGUAGE_ID}")
# This adds a preprocessor variable LANGUAGE_ID whose value is the language.
add_definitions("-DLANGUAGE_ID=\"${LANGUAGE_ID}\"")
# This adds a preprocessor variable so that the program knows that it has
# only one language.
add_definitions("-DEMBED_ONLY_ONE_LANGUAGE")
# This renames the executable.
set_target_properties(SomeName PROPERTIES OUTPUT_NAME "SomeName_${LANGUAGE_ID}")
else(${LANGUAGE_ID} MATCHES "[a-z][a-z]_[A-Z][A-Z]")
# No language id specified. Add the build instructions to embed all the
# translations and to decide at runtime which one to load.
message("Not embedding any language")
# This adds a preprocessor variable so that the program knows that it has
# every language.
add_definitions("-DEMBED_ALL_LANGUAGES")
endif(${LANGUAGE_ID} MATCHES "[a-z][a-z]_[A-Z][A-Z]")
- 1. QT: Commande pour compiler des fichiers qt
- 2. Android Widgets des applications séparées?
- 3. Traduction des applications Qt
- 4. Une solution pour intégrer des publicités dans des applications (Qt)
- 5. Est-il possible d'utiliser des formulaires Orbeon Form Builder dans des applications séparées?
- 6. Est-il possible d'utiliser Win32 Hooks dans les applications Qt
- 7. Est-il possible d'écrire des applications pour Android dans C#?
- 8. utiliser qt et django pour créer des applications de bureau
- 9. Est-il possible de développer des applications Qt Multi-touch pour fonctionner sous Windows, Linux, Mac?
- 10. partager des données entre deux applications séparées dans l'iPhone
- 11. Impossible de compiler Qt avec Xcode 6.0.1
- 12. Compiler un Qt-Project et inclure des bibliothèques Qt
- 13. Comment compiler des applications C++ à partir de Windows pour EC2 CentOS 5 d'Amazon?
- 14. compiler QT statiquement
- 15. Impossible de compiler Qt Creator
- 16. Comment définir des dispositions séparées pour chaque module?
- 17. Passage d'objets entre deux applications dans des machines JVM séparées
- 18. Qt OpenGL compiler Static
- 19. Comment compiler des applications pour plusieurs versions d'ios sdks?
- 20. Insère chaque résultat d'un tableau dans des lignes SQL séparées?
- 21. Compiler le support InterBase dans Qt
- 22. Compiler la langue OO en Javascript
- 23. Exécution des applications Qt sur QNX
- 24. Qt: comment créer des applications QML pour les appareils Symbian?
- 25. Est-il possible de compiler des applications Web Java 1.5 vers 1.4?
- 26. Utilisation de WINAPI dans les applications Qt
- 27. Coder, construire et exécuter sur des machines séparées. Possible?
- 28. Contenu séparé pour chaque langue différente dans joomla
- 29. Compiler un projet rapide dans Qt?
- 30. Comment compiler Qt comme statique
Mais ... * pourquoi *?!? –
Le point du mécanisme de traduction de Qt est que vous n'avez pas besoin de faire exactement ce que vous demandez. –
@Styne, je pense que le PO sait cela. Pourquoi ne pas essayer de répondre à la question comme donnée? – TonyK