[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;
 }