Translations using Qt Linguist? - c++

I am working on Ubuntu 9.10 aka Karmic Kola and latest version of gcc, Qt 4.6.2. I have installed the french fonts and hindi fonts for ubuntu. I changed the language and Keyboard layout accordingly so that I could type in the abovementioned languages. It worked fine. I then made a sample application and added appropriate translations in Hindi and French. The linguist tool worked fine then. I was able to type in Hindi in Linguist. This was around a week back.
Today I was making a different application with Hindi translations, with the steps that I did earlier using Qt Linguist. But now when I type in Hindi in Qt Linguist it gives only one character(for any keypress) which is like "=" with more space between the two horizontal bars in "equal to" sign. In the .ts file generated by lrelease the translations are displayed perfectly but on execution again characters in the form of squares appear as the translated text. I have tried umpteen times, even changing the codecrtr in .pro file but to no effect.
Can somebody point out why Qt Linguist is interpreting hindi characters as "=" but when typed in other applications like openoffice writer and browsers its perfect hindi fonts? I have torn my hair the whole day on this seemingly annoying problem. Didn't try for french though :).
Thanks

After banging my head many times on this problem, I decided to try translations on a newer version of Qt and
VOILA it did the trick. Probably there is a bug in Qt translations module in the version I was using. Notified Qt guys about the same. Hope others will find this information valuable.
Cheers!!!

Related

How to properly embed Qt 5.15 localizations in an iOS application

Qt 5.15 introduces (at least I believe it is new to 5.15) .ts files, to allow for properly handling multi-locale text in an application. I'm updating an iOS Qt app from 5.X, where X knows nothing about .ts files. On startup, I'm getting a warning that indicates that there is an app-specific translation set (which is true), but that there is no translation for Qt's own text (things like warning text and dialog prompts). The documentation says, that these translations are in the Qt5 source directory (currently usually /tqtc-qt5) in the qtttranslations folder. Thus sayeth this doc https://doc.qt.io/qt-5/ios-platform-notes.html#application-assets. Examples show only app-unique text translations, not Qt's "built-in" text. So real quick, I'm going list my assumptions, so that they can be corrected or confirmed.
Qt has always had embedded text of its own, but 5.15 introduces a way to ensure that your multi-locale ready app has all the correctly translated "built-in" text available.
Only the app-writer knows what modules they are using, so it is the app-writer's responsibility to specify which set of translations are added to the app's resources for handling different locales. (per this document - https://doc.qt.io/qt-5/qmake-variable-reference.html#translations)
According to the above two docs, for example, if I use basic Qt functionality and QML, AND I have a single app with tier-one language support for, say, English, German, and French, it appears that my app's .pro file should include something like
TRANSLATIONS += <path_to_qt5>/qttranslations/qtbase_en.ts
TRANSLATIONS += <path_to_qt5>/qttranslations/qtbase_de.ts
TRANSLATIONS += <path_to_qt5>/qttranslations/qtbase_fr.ts
TRANSLATIONS += <path_to_qt5>/qttranslations/qtdeclarative_en.ts
TRANSLATIONS += <path_to_qt5>/qttranslations/qtdeclarative_de.ts
TRANSLATIONS += <path_to_qt5>/qttranslations/qtdeclarative_fr.ts
CONFIG += lrelease embed_translations
I've traced though the Qt source in the debugger to the point where it is complaining about the missing translations. It is looking for qt*_*.qm, where the first wildcard is your module ("base", "declarative", etc) and the second is your two-letter language code. So, should I be explicitly adding .qm files as resources in my iOS bundle, or is TRANSLATIONS += foo_ln.ts implicitly doing this embedding in response to CONFIG += lrelease embed_translations. One things is certain: right now, my naive porting of an older .pro file does nothing with respect the TRANSLATIONS property AND Qt is cranky about the missing .qm files in my bundle. It's a warning, not a critical fail, so I assume in a pinch, it would put up US english text, which seems to be the baseline for translations and is embedded in the source (not the bundle) by default. Do my example additions to the .pro file in point 3 above seem sufficient, or is there more to do? Or is there less to do? Is there a .pro directive that I've missed in the docs that says "do the right thing with international translations of Qt-inherent strings"? There is in a addition to the listed .ts files a "qt_*.ts" file set. Is this just everything whether I need it or not, for lazy people who don't care about lugging around a few extra strings? Finally, there is also EXTRA_TRANSLATIONS which is like TRANSLATIONS, only it does not go through the lupdate during the build. Now I'm pretty unclear on the function of lupdate relative to lrelease, but is it the case that one is for "stock" Qt strings, and the other for App-specific translations (because they may be "updated" due to changes during development)? The semantics just don't make sense to me right now, nor do my responsibilities to handle these matters in the "right" way.
I'd like to answer my own question because it turns out many of the above assumptions were just wrong, and it took deeper dives into the source code and the debugger to get my head straight, but now I have Wisdom. The documents I was reading was about how to include raw translation files "(.ts files)" into an app being built with qmake. As is typical with Qt, building with qmake or Qt Creator solves most of your problems automatically, with your part being to provide only the small amount of specification needed to execute your app. The app I'm working on however is monstrously huge, old, and overly-complicated, so I spend a lot of time hunting down the most obscure Qt and CMake features to cobble this Frankenstein's monster of an app together. The problem I was trying to solve is simply providing to Qt its own text localization files for a multi-locale app. The app-specific ones were fine, but Qt was wagging its finger at me and complaining that it couldn't find its own. So the .ts files it turns out are not a thing for this kind of task - they are simply part of the pipeline of getting data from a translation house in a consumable form. During Qt's own configure and build (yes we build Qt from source), it handles the compiling of raw .ts files into .qm files, suitable for use by the framework's translator objects. Those are all just sitting in qtbase/translations ready to be integrated into the app installation. The problem was that we (the group who developed this app long ago and which I am now reviving) didn't handle the iOS case. This is a special case that requires some choices. You can put translation files in the app's bundle at a specific path, you can home-brew some exotic URL resolution whereby you feed the translator the contents of the .qm files on demand, or you can compile them all into a .qrc file and position them in your resource tree. That last is what we did with the app-specific translations, so I mimicked it for Qt's, filtering the total set of .qm files for the modules we use and for the locales in our tier-one localization target languages. This involved a complicated python script, and a few extra lines of Cmake, including one very elusive one (QINIT_RESOURCES) that gated everything until I realized it was needed for this platform. I'm only wrapping this up, so if anyone else is confused enough to find this question, that there are some general comments to set things straight.

QT How to find untranslated strings

I am testing a QT application I am internationalizing. I think I have found all the strings that need processing through tr() or ::Translate(). I think I have handled all occurrences.
I have gotten back the first rounds of translations (done through Qt linguist tool).
Through QA testing I want to make sure all strings are translated and if possible I would like to easily identify any that are not translated and why.
What tools or methods are available for this?
I have discovered
lrelease -markuntranslated <prefix>
This takes any strings in the .ts file that are untranslated and prepends prefix
If the label "do it now" is in the .ts file and it is not translated in Qt linguist, then if you run lrelease with
-markuntranslated NT-
then you will see the label presented when you run the application as 'NT-do it now'.
This makes it obvious for whomever is testing that the problem is a string that has been processed via ::Translate() or tr(), but which has not been translated in QT linguist.
And any wholly original strings in the UI of the running application must thus be fully untouched by any of the QT translation machinery.
see lrelease -help for more info.

Windows forms gui encoding vs2005

I am working on a programme on VS2005. It has C++ codes. I want to change the language of programme's gui from English to Turkish. But when i changed the language, different characters appears. For example,
View (English)--> Görüntüle (Turkish)
"ö","ü" don't appear correctly.
Code:(download GaScheduleSource.zip - bottom of the page)
http://www.codeguru.com/cpp/cpp/algorithms/general/article.php/c14825/Making-a-Class-Schedule-Using-a-Genetic-Algorithm.htm
Thank you for your help.

Trying to find a syntax highlighter for ColdFusion in Notepad++

I use CFEclipse for most of my projects and heavy lifting but sometimes I find the need to do a quick fix on pages outside the project scope that is easier to accomplish in a simple text editor.
I have googled but can't seem to find an answer so either a link to a download or a link to how to build my own would be awesome. thanks.
Update: Brien Malone's answer below along with charlie arehart's comments are what people should use at this point as nppColdFusion is no longer maintained as of 23 Sept 2011.
Disregard
nppColdFusion is actively maintained
In notepadd ++, go to 'Plugins'> 'Plugin Manager'> 'show plugin manager'. 'Coldfusion Lexer' is listed as available plugin
This question is a few years old now, and unfortunately, the accepted answer involving nppColdFusion is no longer valid because the plug-in doesn't work with NP++ after version 5.x.x and is not being maintained. (It stopped working when Notepad++ switched their plug-in hooking mechanism in version 6.x.x)
The Notepad++ site points to a library of nearly every language highlighter available:
http://sourceforge.net/apps/mediawiki/notepad-plus/index.php?title=User_Defined_Language_Files
ColdFusion (specifically CF9) is listed:
http://notepad-plus.sourceforge.net/commun/userDefinedLang/userDefineLang_CF9.xml
It's not as good as a full plug-in like nppColdFusion, but it is better than pages of black text.
Just a comment about Tony's answer (Aug 22 '14 at 13:00) : he wrote "In notepadd ++, go to 'Plugins'> 'Plugin Manager'> 'show plugin manager'."
However, in ver. 6.8 (maybe since before), there's no "Plugins" menu item on the menu bar. What I had to do is:
1- From the User Defined Language Page
http://docs.notepad-plus-plus.org/index.php?title=User_Defined_Language_Files
Download the ColdFusion User Defined Language file
http://notepad-plus.sourceforge.net/commun/userDefinedLang/userDefineLang_CF9.xml
Into the Notepad++ Folder
2- From the User Defined Language panel, import that file:
Language > Define your language... then press the Import button
ColdFusion will then appear at the bottom of the Language menu item selection list, and NotePad++ will automatically use it for any .CF file you open.
This link might help: http://howardscholz.wordpress.com/2007/06/01/notepad-support-for-coldfusion-8/
Disclaimer: I haven't tried it myself.
I found that nppColdFusion was working well, until I updated NP++ to version 7.6.6. I have tried just about everything to get it working, but to no avail.
I tried Delire Web's solution and it worked perfectly.
The different formatting (font and background colors) takes a bit of getting used to though.

Rendering unicode characters correctly on textbox

I am working on a translation application in which users are allowed to give English input and I need to convert to a target language and display on a text box. I am facing problems in displaying unicode characters.
Complex characters are not rendering correctly. I know windows uses Uniscribe for rendering complex characters. So do I need to use that explicitly to get the correct rendering? What is the equivalent of Uniscribe in LINUX and MAC?
I am using C++ with wxWidgets framework and trying to display unicode characters on a text box. Any help would be great!
Considering that Uniscribe support in wxWidgets was merely a Google Summer of code idea this year, it seems unlikely that it's working today.
There's no trivial Linux or Mac equivalent for Uniscribe
Read up on Pango. It's the library that supports full OpenType rendering on Linux. Mac's another story.