In many cases translations are longer than original strings. That my cause some controls in you forms to overlap and some text in the controls to truncate. It may be difficult to manually detect these, especially because some control may be created and/or moved on runtime. This is why you should use Soluling's user interface checking classes to automatically check you user interface once you run your application. The checker will write a report and take screenshots that show every problem your forms have. You will get best use of the checker class if you use automated user interface tests that are run each time you build your software.
At first glance the above form looks just all right. However there are several issues that are hard to see by just viewing the form. All you have to do is to add few lines of code into your applicaton and compile it. Once you run you application the checker will check the forms and if it finds any issues it takes screenshots, highlights location on the screenshots and writes the screenshot file into the output directory. The default output directory is "Check" sub directory of your application. In addition the checker writes one JSON file that contains all issues and information about each issue.
The following table show all three issues types that all also exist in the above dialog.
|Screenshots created by the checker||Issue|
"This is a read only file" text is truncated.
Even if the original English string will fit into the place it is likely that German translation will not.
This is complete visible but the right part is hidden because it is out of parent's boundary.
These erros may be very hard to see manually.
|Check boxes overlap each other|
Even if you original forms do not have any issues it is quite likely that the localized form will have. This is because translations are often longer than the original strings. This is why you should run the application in ever target language to find issues caused by longer translations. It is a good practice to include checker code only for debug/test builds so use conditional compiling to make sure that it is not included in the release build.
User language checking requires a lot from the platform. In order to make it automatic (i.e. without significant code modification) the framework you use need to be modern. In practice this means that user language checking needs an object oriented framework with components, properties and reflection. The following table shows what platforms support user interface checking:
|Delphi||NtChecker.pas||You need to use Delphi XE2 or later.|