views:

108

answers:

4

I am trying a new direction in Language Kits (or whatever you want to call those multi language text files with placeholders). Basically, I have text like this: Hello, my name is %0. Welcome to %1!. This would be my pText.

My pValues is an array whose values represent %0 and %1.

The following function should find %0 and replace it with pValues[0] and so on.

function _parseDialogMessage(pText, pValues) {
    var result = pText;
    for (var i=0; i<pValues.length; ++i) {
        var regex = new RegExp('\%'+i, 'gi');
        pText = pText.replace(regex, pValues[i]);
    }
    return result;
}

It all works except for the fact that it does not replace the placeholders %0 and %1. All Variables have the expected values but .replace doesn't seem to find my placeholders.

Any help?

Edit 1

Shame on me... -.-

+3  A: 

You are returning the result variable which hold the initial values of the ptext parameter..

return the pText variable..

Gaby
+4  A: 

You don't need "dynamic regex", since replace can take a function as argument:

function _parseDialogMessage(pText, pValues) {
  return pText.replace(/%(\d+)/g, function (s, i) { return pValues[i]; });
}

(and you should return pText.)

KennyTM
A: 

UUhm, you return result and not the replace pText

tDo
A: 

While you can't use any of their code unless you want to GPL your library, the manual for gnu's gettext covers the rationale behind a number of topics related to internationalization.

http://www.gnu.org/software/gettext/manual/gettext.html

edit : I know you're just looking for a magic regex, but it won't be enough.

easy example :

  • I have %n computers.
  • I have 1 computers.

Did you know arabic has a special tense for 2 things, and chinese no tense for the number of things referred to?

Michael Speer