[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[vidalia-svn] r2757: Build our translations from .po files rather than .ts files. (in vidalia/trunk: cmake src/vidalia src/vidalia/i18n)
Author: edmanm
Date: 2008-06-18 23:58:57 -0400 (Wed, 18 Jun 2008)
New Revision: 2757
Modified:
vidalia/trunk/cmake/VidaliaMacros.cmake
vidalia/trunk/src/vidalia/CMakeLists.txt
vidalia/trunk/src/vidalia/i18n/CMakeLists.txt
vidalia/trunk/src/vidalia/i18n/vidalia_i18n.qrc
vidalia/trunk/src/vidalia/languagesupport.cpp
Log:
Build our translations from .po files rather than .ts files. Also use "zh_CN"
and "zh_TW" instead of "zh-cn" and "zh-tw" so we don't look quite so silly.
Modified: vidalia/trunk/cmake/VidaliaMacros.cmake
===================================================================
--- vidalia/trunk/cmake/VidaliaMacros.cmake 2008-06-19 03:30:24 UTC (rev 2756)
+++ vidalia/trunk/cmake/VidaliaMacros.cmake 2008-06-19 03:58:57 UTC (rev 2757)
@@ -10,7 +10,19 @@
## the terms described in the LICENSE file.
##
+## Tool used to convert Qt's .ts files to GNU gettext .po format
+set(VIDALIA_TS2PO_EXECUTABLE ${Vidalia_BINARY_DIR}/src/tools/ts2po/ts2po)
+if (WIN32)
+ set(VIDALIA_TS2PO_EXECUTABLE ${VIDALIA_TS2PO_EXECUTABLE}.exe)
+endif(WIN32)
+## Tool used to convert GNU gettext .po files to Qt's .ts format
+set(VIDALIA_PO2TS_EXECUTABLE ${Vidalia_BINARY_DIR}/src/tools/po2ts/po2ts)
+if (WIN32)
+ set(VIDALIA_PO2TS_EXECUTABLE ${VIDALIA_PO2TS_EXECUTABLE}.exe)
+endif(WIN32)
+
+
## Search for lrelease
find_program(QT_LRELEASE_EXECUTABLE NAMES lrelease-qt4 lrelease
PATHS ${QT_BINARY_DIR} NO_DEFAULT_PATH
@@ -43,25 +55,62 @@
endif(NOT WIN32_WINDRES_EXECUTABLE)
endif(WIN32)
+## Adds custom commands to the specified target that will update each of the
+## supplied .po files
+macro(VIDALIA_UPDATE_PO TARGET)
+ ## Gather a list of all the files that might contain translated strings
+ FILE(GLOB_RECURSE translate_SRCS ${Vidalia_SOURCE_DIR}/*.cpp)
+ FILE(GLOB_RECURSE translate_HDRS ${Vidalia_SOURCE_DIR}/*.h)
+ FILE(GLOB_RECURSE translate_UIS ${Vidalia_SOURCE_DIR}/*.ui)
+ set(translate_SRCS ${translate_SRCS} ${translate_HDRS} ${translate_UIS})
+
+ foreach (it ${ARGN})
+ get_filename_component(po ${it} ABSOLUTE)
+ get_filename_component(podir ${it} PATH)
+ get_filename_component(outfile ${it} NAME_WE)
-## Wraps the supplied .ts files in lrelease commands
-macro(QT4_ADD_TRANSLATIONS outfiles)
+ set(ts ${CMAKE_CURRENT_BINARY_DIR}/${outfile}.ts)
+ add_custom_command(TARGET ${TARGET}
+ # Convert the current .po files to .ts
+ COMMAND ${VIDALIA_PO2TS_EXECUTABLE}
+ ARGS -q -i ${po} -o ${ts}
+ # Update the .ts files
+ COMMAND ${QT_LUPDATE_EXECUTABLE}
+ ARGS -silent -noobsolete ${translate_SRCS} -ts ${ts}
+ # Convert the updated .ts files back to .po
+ COMMAND ${VIDALIA_TS2PO_EXECUTABLE}
+ ARGS -q -i ${ts} -o ${po}
+ DEPENDS ${VIDALIA_TS2PO_EXECUTABLE} ${VIDALIA_PO2TS_EXECUTABLE}
+ COMMENT "Updating translation ${it}"
+ )
+ endforeach(it)
+ add_dependencies(${TARGET} ts2po)
+ add_dependencies(${TARGET} po2ts)
+endmacro(VIDALIA_UPDATE_PO)
+
+
+## Wraps the supplied .po files with commands to convert them to Qt's .qm
+## format
+macro(VIDALIA_ADD_PO outfiles)
foreach (it ${ARGN})
- get_filename_component(it ${it} ABSOLUTE)
+ get_filename_component(po ${it} ABSOLUTE)
get_filename_component(outfile ${it} NAME_WE)
-
- ## XXX: Ideally we would output the .qm files to CMAKE_CURRENT_BINARY_DIR,
- ## but then RCC can't find them when doing out-of-source builds. Is
- ## there an easy fix for this?
- set(outfile ${CMAKE_CURRENT_SOURCE_DIR}/${outfile}.qm)
- add_custom_command(OUTPUT ${outfile}
+
+ ## Create the .po -> .ts conversion step
+ set(ts ${CMAKE_CURRENT_BINARY_DIR}/${outfile}.ts)
+ set(qm ${CMAKE_CURRENT_BINARY_DIR}/${outfile}.qm)
+ add_custom_command(OUTPUT ${qm}
+ COMMAND ${VIDALIA_PO2TS_EXECUTABLE}
+ ARGS -q -i ${po} -o ${ts}
COMMAND ${QT_LRELEASE_EXECUTABLE}
- ARGS -compress -silent -nounfinished ${it} -qm ${outfile}
- MAIN_DEPENDENCY ${it}
+ ARGS -compress -silent -nounfinished ${ts} -qm ${qm}
+ MAIN_DEPENDENCY ${po}
+ DEPENDS ${VIDALIA_PO2TS_EXECUTABLE}
+ COMMENT "Generating ${outfile}.qm"
)
- set(${outfiles} ${${outfiles}} ${outfile})
+ set(${outfiles} ${${outfiles}} ${qm})
endforeach(it)
-endmacro(QT4_ADD_TRANSLATIONS)
+endmacro(VIDALIA_ADD_PO)
if (WIN32)
Modified: vidalia/trunk/src/vidalia/CMakeLists.txt
===================================================================
--- vidalia/trunk/src/vidalia/CMakeLists.txt 2008-06-19 03:30:24 UTC (rev 2756)
+++ vidalia/trunk/src/vidalia/CMakeLists.txt 2008-06-19 03:58:57 UTC (rev 2757)
@@ -21,6 +21,10 @@
${CMAKE_CURRENT_SOURCE_DIR}/res/vidalia_win.rc.in
${CMAKE_CURRENT_SOURCE_DIR}/res/vidalia_win.rc
)
+configure_file(
+ ${CMAKE_CURRENT_SOURCE_DIR}/i18n/vidalia_i18n.qrc
+ ${CMAKE_CURRENT_BINARY_DIR}/i18n/vidalia_i18n.qrc
+)
## Process the translation files
add_subdirectory(i18n)
@@ -213,8 +217,8 @@
## Add the resource files (icons, etc.)
qt4_add_resources(vidalia_SRCS
res/vidalia.qrc
- i18n/vidalia_i18n.qrc
help/content/content.qrc
+ ${CMAKE_CURRENT_BINARY_DIR}/i18n/vidalia_i18n.qrc
)
## Set the appropriate executable target for the current platform
@@ -254,7 +258,7 @@
add_executable(${vidalia_BIN} ${vidalia_SRCS})
endif(WIN32)
endif(APPLE)
-add_dependencies(${vidalia_BIN} translations)
+add_dependencies(${vidalia_BIN} i18n)
## Link to the Qt libraries and other libraries built as a part of Vidalia
Modified: vidalia/trunk/src/vidalia/i18n/CMakeLists.txt
===================================================================
--- vidalia/trunk/src/vidalia/i18n/CMakeLists.txt 2008-06-19 03:30:24 UTC (rev 2756)
+++ vidalia/trunk/src/vidalia/i18n/CMakeLists.txt 2008-06-19 03:58:57 UTC (rev 2757)
@@ -12,46 +12,36 @@
## Vidalia translation files
-set(vidalia_TS
- vidalia_ar.ts
- vidalia_bg.ts
- vidalia_cs.ts
- vidalia_de.ts
- vidalia_en.ts
- vidalia_es.ts
- vidalia_fa.ts
- vidalia_fi.ts
- vidalia_fr.ts
- vidalia_he.ts
- vidalia_hu.ts
- vidalia_it.ts
- vidalia_ja.ts
- vidalia_nb.ts
- vidalia_nl.ts
- vidalia_pl.ts
- vidalia_pt.ts
- vidalia_ru.ts
- vidalia_sq.ts
- vidalia_sv.ts
- vidalia_tr.ts
- vidalia_zh-cn.ts
- vidalia_zh-tw.ts
+set(vidalia_PO
+ ar/vidalia_ar.po
+ bg/vidalia_bg.po
+ cs/vidalia_cs.po
+ de/vidalia_de.po
+ es/vidalia_es.po
+ fa/vidalia_fa.po
+ fi/vidalia_fi.po
+ fr/vidalia_fr.po
+ he/vidalia_he.po
+ hu/vidalia_hu.po
+ it/vidalia_it.po
+ ja/vidalia_ja.po
+ nb/vidalia_nb.po
+ nl/vidalia_nl.po
+ pl/vidalia_pl.po
+ pt/vidalia_pt.po
+ ru/vidalia_ru.po
+ sq/vidalia_sq.po
+ sv/vidalia_sv.po
+ tr/vidalia_tr.po
+ zh_CN/vidalia_zh_CN.po
+ zh_TW/vidalia_zh_TW.po
)
-qt4_add_translations(vidalia_QMS ${vidalia_TS})
+vidalia_add_po(vidalia_QMS ${vidalia_PO})
-## Gather a list of all the files that might contain translated strings
-FILE(GLOB_RECURSE translate_SRCS ${Vidalia_SOURCE_DIR}/src/*.cpp)
-FILE(GLOB_RECURSE translate_HDRS ${Vidalia_SOURCE_DIR}/src/*.h)
-FILE(GLOB_RECURSE translate_UIS ${Vidalia_SOURCE_DIR}/src/*.ui)
-set(translate_SRCS ${translate_SRCS} ${translate_HDRS} ${translate_UIS})
+## Create a target that converts all .po files to Qt .qm files
+add_custom_target(i18n ALL DEPENDS ${vidalia_QMS})
## Create a target that runs lupdate for all the source and UI files
-add_custom_target(lupdate
- COMMAND ${QT_LUPDATE_EXECUTABLE} -noobsolete ${translate_SRCS} -ts ${vidalia_TS}
-)
-add_dependencies(lupdate ts2po)
+add_custom_target(i18n-update)
+vidalia_update_po(i18n-update ${vidalia_PO})
-## Create a target that runs lrelease for all the .ts files
-add_custom_target(translations ALL DEPENDS ${vidalia_QMS})
-add_dependencies(translations po2ts)
-
Modified: vidalia/trunk/src/vidalia/i18n/vidalia_i18n.qrc
===================================================================
--- vidalia/trunk/src/vidalia/i18n/vidalia_i18n.qrc 2008-06-19 03:30:24 UTC (rev 2756)
+++ vidalia/trunk/src/vidalia/i18n/vidalia_i18n.qrc 2008-06-19 03:58:57 UTC (rev 2757)
@@ -4,7 +4,6 @@
<file>vidalia_bg.qm</file>
<file>vidalia_cs.qm</file>
<file>vidalia_de.qm</file>
- <file>vidalia_en.qm</file>
<file>vidalia_es.qm</file>
<file>vidalia_fa.qm</file>
<file>vidalia_fi.qm</file>
@@ -21,8 +20,8 @@
<file>vidalia_sq.qm</file>
<file>vidalia_sv.qm</file>
<file>vidalia_tr.qm</file>
- <file>vidalia_zh-cn.qm</file>
- <file>vidalia_zh-tw.qm</file>
+ <file>vidalia_zh_CN.qm</file>
+ <file>vidalia_zh_TW.qm</file>
</qresource>
</RCC>
Modified: vidalia/trunk/src/vidalia/languagesupport.cpp
===================================================================
--- vidalia/trunk/src/vidalia/languagesupport.cpp 2008-06-19 03:30:24 UTC (rev 2756)
+++ vidalia/trunk/src/vidalia/languagesupport.cpp 2008-06-19 03:58:57 UTC (rev 2757)
@@ -61,9 +61,9 @@
languages.insert("sq", "Shqip");
languages.insert("sv", "svenska");
languages.insert("tr", QString::fromUtf8("T\303\274rk\303\247e"));
- languages.insert("zh-cn",
+ languages.insert("zh_CN",
QString::fromUtf8("\347\256\200\344\275\223\345\255\227"));
- languages.insert("zh-tw",
+ languages.insert("zh_TW",
QString::fromUtf8("\347\260\241\351\253\224\345\255\227"));
}
return languages;
@@ -73,14 +73,13 @@
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)) {
+ QString language = QLocale::system().name();
+
+ if (language != "zh_CN" && language != "zh_TW")
+ language = language.mid(0, language.indexOf("_"));
+ if (!isValidLanguageCode(language))
language = "en";
- }
+
return language;
}
@@ -132,17 +131,19 @@
bool
LanguageSupport::translate(const QString &languageCode)
{
- QString code = languageCode.toLower();
- if (isValidLanguageCode(code)) {
- QTranslator *translator = new QTranslator(vApp);
- if (translator->load(QString(":/lang/vidalia_%1.qm").arg(code))) {
- QApplication::installTranslator(translator);
- if (isRightToLeft(code))
- vApp->setLayoutDirection(Qt::RightToLeft);
- return true;
- }
- delete translator;
+ if (!isValidLanguageCode(languageCode))
+ return false;
+ if (languageCode == "en")
+ return true;
+
+ QTranslator *translator = new QTranslator(vApp);
+ if (translator->load(QString(":/lang/vidalia_%1.qm").arg(languageCode))) {
+ QApplication::installTranslator(translator);
+ if (isRightToLeft(languageCode))
+ vApp->setLayoutDirection(Qt::RightToLeft);
+ return true;
}
+ delete translator;
return false;
}