Changeset 2757

Show
Ignore:
Timestamp:
06/18/08 23:58:57 (7 months ago)
Author:
edmanm
Message:

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.

Location:
vidalia/trunk
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • vidalia/trunk/cmake/VidaliaMacros.cmake

    r2438 r2757  
    1111## 
    1212 
     13## Tool used to convert Qt's .ts files to GNU gettext .po format 
     14set(VIDALIA_TS2PO_EXECUTABLE ${Vidalia_BINARY_DIR}/src/tools/ts2po/ts2po) 
     15if (WIN32) 
     16  set(VIDALIA_TS2PO_EXECUTABLE ${VIDALIA_TS2PO_EXECUTABLE}.exe) 
     17endif(WIN32) 
     18 
     19## Tool used to convert GNU gettext .po files to Qt's .ts format 
     20set(VIDALIA_PO2TS_EXECUTABLE ${Vidalia_BINARY_DIR}/src/tools/po2ts/po2ts) 
     21if (WIN32) 
     22  set(VIDALIA_PO2TS_EXECUTABLE ${VIDALIA_PO2TS_EXECUTABLE}.exe) 
     23endif(WIN32) 
     24     
    1325 
    1426## Search for lrelease 
     
    4456endif(WIN32) 
    4557 
    46  
    47 ## Wraps the supplied .ts files in lrelease commands 
    48 macro(QT4_ADD_TRANSLATIONS outfiles) 
     58## Adds custom commands to the specified target that will update each of the 
     59## supplied .po files  
     60macro(VIDALIA_UPDATE_PO TARGET) 
     61  ## Gather a list of all the files that might contain translated strings 
     62  FILE(GLOB_RECURSE translate_SRCS ${Vidalia_SOURCE_DIR}/*.cpp) 
     63  FILE(GLOB_RECURSE translate_HDRS ${Vidalia_SOURCE_DIR}/*.h) 
     64  FILE(GLOB_RECURSE translate_UIS  ${Vidalia_SOURCE_DIR}/*.ui) 
     65  set(translate_SRCS ${translate_SRCS} ${translate_HDRS} ${translate_UIS}) 
     66  
    4967  foreach (it ${ARGN}) 
    50     get_filename_component(it ${it} ABSOLUTE) 
     68    get_filename_component(po ${it} ABSOLUTE) 
     69    get_filename_component(podir ${it} PATH) 
    5170    get_filename_component(outfile ${it} NAME_WE) 
    5271 
    53     ## XXX: Ideally we would output the .qm files to CMAKE_CURRENT_BINARY_DIR, 
    54     ##      but then RCC can't find them when doing out-of-source builds. Is 
    55     ##      there an easy fix for this? 
    56     set(outfile ${CMAKE_CURRENT_SOURCE_DIR}/${outfile}.qm) 
    57     add_custom_command(OUTPUT ${outfile} 
     72    set(ts ${CMAKE_CURRENT_BINARY_DIR}/${outfile}.ts) 
     73    add_custom_command(TARGET ${TARGET} 
     74      # Convert the current .po files to .ts 
     75      COMMAND ${VIDALIA_PO2TS_EXECUTABLE} 
     76      ARGS -q -i ${po} -o ${ts} 
     77      # Update the .ts files 
     78      COMMAND ${QT_LUPDATE_EXECUTABLE} 
     79      ARGS -silent -noobsolete ${translate_SRCS} -ts ${ts} 
     80      # Convert the updated .ts files back to .po 
     81      COMMAND ${VIDALIA_TS2PO_EXECUTABLE} 
     82      ARGS -q -i ${ts} -o ${po} 
     83      DEPENDS ${VIDALIA_TS2PO_EXECUTABLE} ${VIDALIA_PO2TS_EXECUTABLE} 
     84      COMMENT "Updating translation ${it}" 
     85    ) 
     86  endforeach(it) 
     87  add_dependencies(${TARGET} ts2po) 
     88  add_dependencies(${TARGET} po2ts) 
     89endmacro(VIDALIA_UPDATE_PO) 
     90 
     91 
     92## Wraps the supplied .po files with commands to convert them to Qt's .qm 
     93## format 
     94macro(VIDALIA_ADD_PO outfiles) 
     95  foreach (it ${ARGN}) 
     96    get_filename_component(po ${it} ABSOLUTE) 
     97    get_filename_component(outfile ${it} NAME_WE) 
     98     
     99    ## Create the .po -> .ts conversion step 
     100    set(ts ${CMAKE_CURRENT_BINARY_DIR}/${outfile}.ts) 
     101    set(qm ${CMAKE_CURRENT_BINARY_DIR}/${outfile}.qm) 
     102    add_custom_command(OUTPUT ${qm} 
     103      COMMAND ${VIDALIA_PO2TS_EXECUTABLE} 
     104      ARGS -q -i ${po} -o ${ts} 
    58105      COMMAND ${QT_LRELEASE_EXECUTABLE} 
    59       ARGS -compress -silent -nounfinished ${it} -qm ${outfile} 
    60       MAIN_DEPENDENCY ${it} 
     106      ARGS -compress -silent -nounfinished ${ts} -qm ${qm} 
     107      MAIN_DEPENDENCY ${po} 
     108      DEPENDS ${VIDALIA_PO2TS_EXECUTABLE} 
     109      COMMENT "Generating ${outfile}.qm" 
    61110    ) 
    62     set(${outfiles} ${${outfiles}} ${outfile}) 
     111    set(${outfiles} ${${outfiles}} ${qm}) 
    63112  endforeach(it) 
    64 endmacro(QT4_ADD_TRANSLATIONS) 
     113endmacro(VIDALIA_ADD_PO) 
    65114 
    66115 
  • vidalia/trunk/src/vidalia/CMakeLists.txt

    r2648 r2757  
    2121  ${CMAKE_CURRENT_SOURCE_DIR}/res/vidalia_win.rc.in 
    2222  ${CMAKE_CURRENT_SOURCE_DIR}/res/vidalia_win.rc 
     23) 
     24configure_file( 
     25  ${CMAKE_CURRENT_SOURCE_DIR}/i18n/vidalia_i18n.qrc 
     26  ${CMAKE_CURRENT_BINARY_DIR}/i18n/vidalia_i18n.qrc 
    2327) 
    2428 
     
    214218qt4_add_resources(vidalia_SRCS 
    215219  res/vidalia.qrc 
    216   i18n/vidalia_i18n.qrc 
    217220  help/content/content.qrc 
     221  ${CMAKE_CURRENT_BINARY_DIR}/i18n/vidalia_i18n.qrc 
    218222) 
    219223 
     
    255259  endif(WIN32) 
    256260endif(APPLE) 
    257 add_dependencies(${vidalia_BIN} translations) 
     261add_dependencies(${vidalia_BIN} i18n) 
    258262 
    259263 
  • vidalia/trunk/src/vidalia/i18n/CMakeLists.txt

    r2747 r2757  
    1313 
    1414## Vidalia translation files 
    15 set(vidalia_TS 
    16   vidalia_ar.ts 
    17   vidalia_bg.ts 
    18   vidalia_cs.ts 
    19   vidalia_de.ts 
    20   vidalia_en.ts 
    21   vidalia_es.ts 
    22   vidalia_fa.ts 
    23   vidalia_fi.ts 
    24   vidalia_fr.ts 
    25   vidalia_he.ts 
    26   vidalia_hu.ts 
    27   vidalia_it.ts 
    28   vidalia_ja.ts 
    29   vidalia_nb.ts 
    30   vidalia_nl.ts 
    31   vidalia_pl.ts 
    32   vidalia_pt.ts 
    33   vidalia_ru.ts 
    34   vidalia_sq.ts 
    35   vidalia_sv.ts 
    36   vidalia_tr.ts 
    37   vidalia_zh-cn.ts 
    38   vidalia_zh-tw.ts 
     15set(vidalia_PO 
     16  ar/vidalia_ar.po 
     17  bg/vidalia_bg.po 
     18  cs/vidalia_cs.po 
     19  de/vidalia_de.po 
     20  es/vidalia_es.po 
     21  fa/vidalia_fa.po 
     22  fi/vidalia_fi.po 
     23  fr/vidalia_fr.po 
     24  he/vidalia_he.po 
     25  hu/vidalia_hu.po 
     26  it/vidalia_it.po 
     27  ja/vidalia_ja.po 
     28  nb/vidalia_nb.po 
     29  nl/vidalia_nl.po 
     30  pl/vidalia_pl.po 
     31  pt/vidalia_pt.po 
     32  ru/vidalia_ru.po 
     33  sq/vidalia_sq.po 
     34  sv/vidalia_sv.po 
     35  tr/vidalia_tr.po 
     36  zh_CN/vidalia_zh_CN.po 
     37  zh_TW/vidalia_zh_TW.po 
    3938) 
    40 qt4_add_translations(vidalia_QMS ${vidalia_TS}) 
     39vidalia_add_po(vidalia_QMS ${vidalia_PO}) 
    4140 
    42 ## Gather a list of all the files that might contain translated strings 
    43 FILE(GLOB_RECURSE translate_SRCS ${Vidalia_SOURCE_DIR}/src/*.cpp) 
    44 FILE(GLOB_RECURSE translate_HDRS ${Vidalia_SOURCE_DIR}/src/*.h) 
    45 FILE(GLOB_RECURSE translate_UIS  ${Vidalia_SOURCE_DIR}/src/*.ui) 
    46 set(translate_SRCS ${translate_SRCS} ${translate_HDRS} ${translate_UIS}) 
     41## Create a target that converts all .po files to Qt .qm files 
     42add_custom_target(i18n ALL DEPENDS ${vidalia_QMS}) 
    4743 
    4844## Create a target that runs lupdate for all the source and UI files 
    49 add_custom_target(lupdate  
    50   COMMAND ${QT_LUPDATE_EXECUTABLE} -noobsolete ${translate_SRCS} -ts ${vidalia_TS} 
    51 ) 
    52 add_dependencies(lupdate ts2po) 
     45add_custom_target(i18n-update) 
     46vidalia_update_po(i18n-update ${vidalia_PO}) 
    5347 
    54 ## Create a target that runs lrelease for all the .ts files 
    55 add_custom_target(translations ALL DEPENDS ${vidalia_QMS}) 
    56 add_dependencies(translations po2ts) 
    57  
  • vidalia/trunk/src/vidalia/i18n/vidalia_i18n.qrc

    r2599 r2757  
    55    <file>vidalia_cs.qm</file> 
    66    <file>vidalia_de.qm</file> 
    7     <file>vidalia_en.qm</file> 
    87    <file>vidalia_es.qm</file> 
    98    <file>vidalia_fa.qm</file> 
     
    2221    <file>vidalia_sv.qm</file> 
    2322    <file>vidalia_tr.qm</file> 
    24     <file>vidalia_zh-cn.qm</file> 
    25     <file>vidalia_zh-tw.qm</file> 
     23    <file>vidalia_zh_CN.qm</file> 
     24    <file>vidalia_zh_TW.qm</file> 
    2625  </qresource> 
    2726</RCC> 
  • vidalia/trunk/src/vidalia/languagesupport.cpp

    r2600 r2757  
    6262    languages.insert("sv",    "svenska"); 
    6363    languages.insert("tr",    QString::fromUtf8("T\303\274rk\303\247e")); 
    64     languages.insert("zh-cn",  
     64    languages.insert("zh_CN",  
    6565      QString::fromUtf8("\347\256\200\344\275\223\345\255\227")); 
    66     languages.insert("zh-tw",  
     66    languages.insert("zh_TW",  
    6767      QString::fromUtf8("\347\260\241\351\253\224\345\255\227")); 
    6868  } 
     
    7474LanguageSupport::defaultLanguageCode() 
    7575{ 
    76   QString localeName = QLocale::system().name(); 
    77   QString language   = localeName.mid(0, localeName.indexOf("_")); 
    78   if (language == "zh") { 
    79     language += "-" + localeName.mid(localeName.indexOf("_")+1).toLower(); 
    80   } 
    81   if (!isValidLanguageCode(language)) { 
     76  QString language = QLocale::system().name(); 
     77 
     78  if (language != "zh_CN" && language != "zh_TW") 
     79    language = language.mid(0, language.indexOf("_")); 
     80  if (!isValidLanguageCode(language)) 
    8281    language = "en"; 
    83   } 
     82   
    8483  return language; 
    8584} 
     
    133132LanguageSupport::translate(const QString &languageCode) 
    134133{ 
    135   QString code = languageCode.toLower(); 
    136   if (isValidLanguageCode(code)) { 
    137     QTranslator *translator = new QTranslator(vApp); 
    138     if (translator->load(QString(":/lang/vidalia_%1.qm").arg(code))) { 
    139       QApplication::installTranslator(translator); 
    140       if (isRightToLeft(code)) 
    141         vApp->setLayoutDirection(Qt::RightToLeft); 
    142       return true; 
    143     } 
    144     delete translator; 
     134  if (!isValidLanguageCode(languageCode)) 
     135    return false; 
     136  if (languageCode == "en") 
     137    return true; 
     138 
     139  QTranslator *translator = new QTranslator(vApp); 
     140  if (translator->load(QString(":/lang/vidalia_%1.qm").arg(languageCode))) { 
     141    QApplication::installTranslator(translator); 
     142    if (isRightToLeft(languageCode)) 
     143      vApp->setLayoutDirection(Qt::RightToLeft); 
     144    return true; 
    145145  } 
     146  delete translator; 
    146147  return false; 
    147148}