Локализация с JQuery?

РЕДАКТИРОВАНИЕ: теперь, когда я знаю лучше

Используя regexp решать этот вид проблемы, плохая идея и вероятно введет неудобный в сопровождении и ненадежный код. Лучше используйте синтаксический анализатор HTML .

Решение С regexp

В этом случае лучше разделить процесс на две части:

  • добираются, весь тег img
  • извлекают их метаданные

, я предположу, что Ваш документ не xHTML строгий, таким образом, Вы не можете использовать синтаксический анализатор XML. НАПРИМЕР, с этим исходным кодом веб-страницы:

/* preg_match_all match the regexp in all the $html string and output everything as 
an array in $result. "i" option is used to make it case insensitive */

preg_match_all('/]+>/i',$html, $result); 

print_r($result);
Array
(
    [0] => Array
        (
            [0] => logo link to homepage
            [1] => vote up
            [2] => vote down
            [3] => gravatar image
            [4] => vote up

[...]
        )

)

Тогда мы получаем все атрибуты тега img с циклом:

$img = array();
foreach( $result as $img_tag)
{
    preg_match_all('/(alt|title|src)=("[^"]*")/i',$img_tag, $img[$img_tag]);
}

print_r($img);

Array
(
    [logo link to homepage] => Array
        (
            [0] => Array
                (
                    [0] => src="/Content/Img/stackoverflow-logo-250.png"
                    [1] => alt="logo link to homepage"
                )

            [1] => Array
                (
                    [0] => src
                    [1] => alt
                )

            [2] => Array
                (
                    [0] => "/Content/Img/stackoverflow-logo-250.png"
                    [1] => "logo link to homepage"
                )

        )

    [vote up] => Array
        (
            [0] => Array
                (
                    [0] => src="/content/img/vote-arrow-up.png"
                    [1] => alt="vote up"
                    [2] => title="This was helpful (click again to undo)"
                )

            [1] => Array
                (
                    [0] => src
                    [1] => alt
                    [2] => title
                )

            [2] => Array
                (
                    [0] => "/content/img/vote-arrow-up.png"
                    [1] => "vote up"
                    [2] => "This was helpful (click again to undo)"
                )

        )

    [vote down] => Array
        (
            [0] => Array
                (
                    [0] => src="/content/img/vote-arrow-down.png"
                    [1] => alt="vote down"
                    [2] => title="This was not helpful (click again to undo)"
                )

            [1] => Array
                (
                    [0] => src
                    [1] => alt
                    [2] => title
                )

            [2] => Array
                (
                    [0] => "/content/img/vote-arrow-down.png"
                    [1] => "vote down"
                    [2] => "This was not helpful (click again to undo)"
                )

        )

    [gravatar image] => Array
        (
            [0] => Array
                (
                    [0] => src="http://www.gravatar.com/avatar/df299babc56f0a79678e567e87a09c31?s=32&d=identicon&r=PG"
                    [1] => alt="gravatar image"
                )

            [1] => Array
                (
                    [0] => src
                    [1] => alt
                )

            [2] => Array
                (
                    [0] => "http://www.gravatar.com/avatar/df299babc56f0a79678e567e87a09c31?s=32&d=identicon&r=PG"
                    [1] => "gravatar image"
                )

        )

   [..]
        )

)

Regexps являются ЦП, интенсивным, таким образом, можно хотеть кэшировать эту страницу. Если у Вас нет системы кэша, можно настроить собственное при помощи ob_start и загружающийся / сохраняющий от текстового файла.

, Как это наполняет работу?

Первый, мы используем preg_ match_ весь , функция, которая получает каждое сопоставление строк шаблон и ouput он в, он - третий параметр.

regexps:

]+>

Мы применяем его на все веб-страницы HTML. Это может быть считано как [1 110] каждая строка, которая запускается с" ", содержит не">" символ и заканчивается a> .

(alt|title|src)=("[^"]*")

Мы применяем его последовательно на каждый тег img. Это может быть считано как [1 111] каждая строка, запускающаяся с "высокого звука", "заголовка" или "src", тогда "=", тогда '"', набор материала, которые не являются '"' и концы с a '"'. Изолируйте подстроки между () .

Наконец, каждый раз Вы хотите иметь дело с regexps, это удобный для имения хороших инструментов для быстрого тестирования их. Проверьте это regexp тестер онлайн .

РЕДАКТИРОВАНИЕ: ответьте на первый комментарий.

Это верно, что я не думал о (надо надеяться, немногие) люди, использующие одинарные кавычки.

ну, если Вы используете только', просто заменяют весь "'.

, Если Вы смешиваете обоих. Сначала необходимо хлопнуть себя:-), затем попытайтесь использовать (" | ') вместо этого или" и [^Гё] для замены [^ "].

13
задан BalusC 20 February 2010 в 00:05
поделиться

3 ответа

Для этого нет простого решения. Что я, вероятно, сделал бы, так это создал несколько скриптов с языковыми текстами для каждого языка и включил подходящий в PHP.

15
ответ дан 1 December 2019 в 21:12
поделиться

На самом деле вам вообще не нужен JQuery.

Объект навигатора в javascript ( http://www.comptechdoc.org/independent/web/cgi/javamanual/javanavigator.html ) содержит пользовательский язык (IE) и язык (Netscape / Firefox) свойство, установленное текущим языковым стандартом браузера.

Для решения вашего примера вы можете использовать что-то вроде:

   
  var textToSet = null;
  var userLang = null;

  /*
  -if userLanguage exists they're in IE, else firefox
  -get the first two letters in lowercase to guarantee 
   an easily evaluated base language
  */
  if(navigator.userLanguage) baseLang = substring(navigator.userLanguage,0,2).toLowerCase();
  else baseLang = substring(navigator.language,0,2).toLowerCase();

  //check languages
  switch(baseLang)
  {
    case "de":
      //German
      textToSet = "german text";
      break;
    default:
      textToSet = "english text";
  }
  document.getElementById('elementToSetTextInto').innerHTML = textToSet;


Имейте в виду, вам может потребоваться другой текст на основе базового языка и локали .. в этом случае ищите " en-us »,« де-де ». Сайты с кодами культуры легко найти в Google (1 ссылка только на первое сообщение;))

Надеюсь, что у вас получится.

3
ответ дан 1 December 2019 в 21:12
поделиться

Попробуйте это. Кнопка TranslateThis - это легкий виджет перевода на Javascript. Он быстро переводит любую страницу, используя AJAX и Google Language API.

Здесь...

0
ответ дан 1 December 2019 в 21:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: