Globalyzer Concatenation

From Lingoport Wiki
Revision as of 18:15, 5 November 2015 by Olibouban (talk | contribs) (Proper String Formatting for Internationalization)
Jump to: navigation, search

UNDER EMBARGO

Introduction

What is String Concatenation?

String concatenation is widely used in software programming. String concatenation is the operation of joining two character strings end-to-end For example:

String hi = “Hello ” + “World!”;

Another example:

System.out.print(“Hello “);
System.out.println(“World!”);


A typical usage is with a variable in the middle of a string:

String ua = user +“ is ”+ age + “ years old.”;

Why is String Concatenation an Internationalization Issue?

The strings "is" and " years old." could be externalized into two resources in a resource bundle, for example in a file named resources.properties:

RES1= years old.
RES2=Title
RES3=Navigate
RES4=is

If a translator ends up with four segments to translate, the overall sentence is lost. Furthermore, even if the translator could translate it correctly, the word order is different by languages, the grammar is different too. For instance, in French, a person has four years. Without the context of the full sentence, a translator could not guess where "is" will be used.

For applications which need to execute in different locales, strings which are visible to the user should not be concatenated. Some feedback from Lingoport clients on this particular problem, before being internationalized properly:

  • “We get a lot of questions from our L10N vendor” 
  • “Our biggest trouble area is fragmented strings in the resource bundle.  At first, my team was just going along happily externalizing  […]”
  • “We have a lot of cases where there is a variable in the middle of the string” 
  • “We end up with two strings in the resources bundle rather than one string with a token for the variable piece of content”

Proper String Formatting for Internationalization

Most programming languages support some kind of parameter substitution. This mechanism can be used to refactor concatenation into proper resources. For instance, you could have a string like "{0} is {1} years old." for a Java string using the MessageFormat class to replace parameter '0' with the value of 'user' and parameter '1' with the value of 'age'. The resource in the resource bundle would then look like the following:

RES1={0} is {1} years old.
RES2=Title

User Interface

Type of Rules

Example

Code Snippet



This snippet of code does have strings.

Rule

The String Method Filter rule would be configured the following way:

  • Name: '
  • Pattern: '
  • Class or Variable Type(s): '
  • Description: '
  • Help Page: <blank>

The String Method Detection rule would be configured the following way:

  • Name: '
  • Pattern: '
  • Class or Variable Type(s): '
  • Description: '
  • Help Page: <blank>

Result

When the rules are applied:

  • The string
  • The string