Ajax documento html I18n

Estoy usando ese código:

$.get(
    'filename.html',
    function(content)
    {
        $('#container').empty().append(content);
    }
);

para cargar algunos archivos externos y colocar el contenido en la página de trabajo actual. Los archivos externos que cargo están en HTML simple y me gustaría preguntar si hay alguna buena manera de internacionalizar las páginas cargadas.

En mi página actual, tengo la oportunidad de crear un objeto javascript con todas las claves de traducción como:

var i18n = {
    'doc1' : {
        'title' : 'This is a title'
    }
};

En el ejemplo, los archivos externos se ven así.

<h3>This is a title</h3>
.....

¿Hay alguna manera de cambiar eso a algo similar a

<h3>{doc1.title}</h3>
.....

y luego después de la carga para reemplazar el doc1.title;

preguntado el 28 de julio de 12 a las 11:07

3 Respuestas

Puede ser así:

var i18n = {
    'doc1' : {
        'title' : 'This is a title'
    }
};

$.get(
    'filename.html',
    function(content)
    {
        for (var doc in i18n) {
            for (var key in i18n[doc]) {
                var val = i18n[doc][key];
                content = content.replace( '{' + doc + '.' + key + '}', val );
            }
        }
        $('#container').empty().append(content);
    }
);

violín: http://jsfiddle.net/Kirrr/eW7Nn/

Respondido 28 Jul 12, 11:07

Puede ser algo como esto que estás buscando:

1. Actualizado

JavaScript:

var i18n = { doc1: { title: 'Title', ... }, ... };
var doc_name = 'doc1';

$.get(doc_name + '.html', function(data) {
  for (var word in i18n[doc_name]) {
    data = data.replace(new RegExp('/' + word + '/', 'g'), i18n[doc_name][word]);
  }

  $('#container').html(data);
});

HTML:

<h3>{title}</h3>

2.

JavaScript:

var doc1 = { title: 'Title', ... };

$.get("doc1.php", doc1, function(data) {
  $('#container').html(data);
});

PHP:

<h3><?= $_GET['title'] ?></h3>

Respondido 28 Jul 12, 11:07

Si su documento recuperado contiene

<h3 id="localTitle"></h3>

Podrías hacerlo

$.get(
    'filename.html',
    function(content)
    {
        $('#container').empty().append(content);
        $('#container #localTitle').html('This is a title');
    }
);

Respondido 28 Jul 12, 11:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.