Нужно определить язык пользователя и загрузить переводчик

Для заказа/предложений по работе с сайтом, дизайном, скриптами т.п.

Нужно определить язык пользователя и загрузить переводчик

» » Сообщение:

Здравствуйте!
Мне нужно было определить страну и язык пользователя который заходить на мой сайт.
я нашел вот такой скрипт от яндекс сервиса

script Код: Выделить всё Развернуть
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<script src="http://api-maps.yandex.ru/2.0-stable/?load=package.standard&lang=en-RU" type="text/javascript"></script>

и функции для вывода имя страны

script Код: Выделить всё Развернуть
<script type="text/javascript">
    $(document).ready(function()
   {
        ymaps.ready(function()
      {
          var country = ymaps.geolocation.country;
         
         
          $('#country').html(''+country);
         
        });
    });
</script>

сам имя страны загружается вот сюда

html Код: Выделить всё Развернуть
<!-- Для вывода страны -->
<div id="country"></div>

у меня есть скрипты который переводит одну слов на другую.
я это скрипты для перевода собрал с помощью этого сайта.
Пример.. сайт на Русском языке.
Я из Азербайджана, я как захожу на сайт мне надо язык Азербайджанский...
Скрипт от Яндекса определитель страну Azerbaijan
для вывода слово Azerbaijan служит вот это строка

script Код: Выделить всё Развернуть
$('#country').html(''+country);

теперь надо так сделать чтоб
внутри скрипта Яндекса находился вот такая функция ...

script Код: Выделить всё Развернуть
<script type="text/javascript">
    $(document).ready(function()
   {
        ymaps.ready(function()
      {
          var country = ymaps.geolocation.country;
         
         
          $('#country').html(''+country);
               
         (function(){var a=document.createElement("script");a.type="text/javascript";a.id="aze_eng";a.async=!1;a.src="../translates/translate_Azerbaijan.js";var b=document.getElementsByTagName("script")[0];b.parentNode.insertBefore(a,b);})();

        });
    });
</script>

а место этого

script Код: Выделить всё Развернуть
src="../translates/translate_Azerbaijan.js"

стоял вот это

script Код: Выделить всё Развернуть
src="../translates/translate_+country.js"

таким способам +country будет выводит имя страну, и загрузится тот скрипт переводчик этого страну
я так понимаю что это надо сделать, с помощью функцией var, for, in,
но не знаю как ...
по этому прошу помощь ...
заранее благодарен!


Re: Нужно определить язык пользователя и загрузить переводчи

Admin » » Сообщение:

Mamedov Samir7,

Mamedov Samir7 писал(а) › 14 мар 2016, 11:48:таким способам +country будет выводит имя страну, и загрузится тот скрипт переводчик этого страну
я так понимаю что это надо сделать, с помощью функцией var, for, in,
но не знаю как ...
по этому прошу помощь ...

Добрый.
Вот так это делается:

Код: Выделить всё Развернуть
<script type="text/javascript">
    $(document).ready(function(){
        ymaps.ready(function(){
          var country = ymaps.geolocation.country;
               
               var a=document.createElement("script");
               a.type="text/javascript";
               a.id="aze_eng";
               a.async=!1;
               a.src="../translates/translate_"+country+".js";
               var b=document.getElementsByTagName("script")[0];
               b.parentNode.insertBefore(a,b);
         
          $('#country').html(''+country);
        });
    });
</script>

Re: Нужно определить язык пользователя и загрузить переводчи

Mamedov Samir7 » » Сообщение:

Admin писал(а) › 14 мар 2016, 12:00:Добрый.
Вот так это делается:

Спасибо за помощь ... но немного ошиблись с этим '+countyr+ ' но уже поправил "+countyr+ ",
а можно еще переработать это скрипт? чтоб место имя страны выводился мой текст.
например наш "+countyr+ " выводит имя страны как Azerbaijan а мне нужно чтоб место слово Azerbaijan выводился ru_az это для того чтоб, избежать из ситуации, если пользователь Русско язычный, войдет на сайт из Азербайджана , ему покажет Азербайджанский язык, для этого будет кнопки который при нажатие из Азербайджанского языка перевести на Русский, с вызовом

script Код: Выделить всё Развернуть
../translates/translate_'+az_ru+'.js

Re: Нужно определить язык пользователя и загрузить переводчи

Admin » » Сообщение:

Mamedov Samir7 писал(а) › 14 мар 2016, 13:04:Спасибо за помощь ... но немного ошиблись с этим '+countyr+ ' но уже поправил "+countyr+ ",

Да, спасибо, поправил)

Mamedov Samir7 писал(а) › 14 мар 2016, 13:04:это для того чтоб, избежать из ситуации, если пользователь Русско язычный, войдет на сайт из Азербайджана , ему покажет Азербайджанский язык, для этого будет кнопки который при нажатие из Азербайджанского языка перевести на Русский

Проще сделать выпадающий список с языками для перевода и запоминанием выбора на куки.
А запоминать - по любому надо, хотя бы на сессию, что бы не дергать каждый раз яндекс, да и просто для удобства пользователя.
А проверять, все таки, лучше по локали на компе.

Код: Выделить всё Развернуть
var lng = navigator.browserLanguage || navigator.language || navigator.userLanguage;
alert(lng); // ru-RU

Re: Нужно определить язык пользователя и загрузить переводчи

Mamedov Samir7 » » Сообщение:

Admin писал(а) › 14 мар 2016, 13:44:А проверять, все таки лучше по локали на компе.

я так думаю что это вариант не подойдет .. потому что если у пользователя комп на Русском языке а его Язык Азербайджанский тогда будет переведен на Русском языке,


Re: Нужно определить язык пользователя и загрузить переводчи

Admin » » Сообщение:

Mamedov Samir7 писал(а) › 14 мар 2016, 14:54:потому что если у пользователя комп на Русском языке а его Язык Азербайджанский тогда будет переведен на Русском языке,

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

Однако, список с языками для перевода лучше сделать - дабы дать возможность пользователю самому выбрать удобный для него язык.


Re: Нужно определить язык пользователя и загрузить переводчи

Mamedov Samir7 » » Сообщение:

Admin писал(а) › 14 мар 2016, 15:32:Однако, список с языками для перевода лучше сделать - дабы дать возможность пользователю самому выбрать удобный для него язык.

А как это сделать ? ну так и я хочу сделать... сначала будет загружен язык страны, если пользователя не понятен тот язык, тогда он будет выбрать свой язык из выпадающие списка.
Я сейчас делаю как вы говорили, чтоб выбор из выпадающего списка, просто тут будет немного трудности, от не которых функцией, тогда вы поможете ?


Re: Нужно определить язык пользователя и загрузить переводчи

Admin » » Сообщение:

Mamedov Samir7

Mamedov Samir7 писал(а) › 14 мар 2016, 16:06:А как это сделать ?

Типа так:

Код: Выделить всё Развернуть
<select onchange="set_lang(this.value)" id="lang_select">
<option value="ru">Русский</option>
<option value="en">Английский</option>
</select>

<script type="text/javascript">
function setCookie(a,b,c){if(c){var d=new Date();d.setTime(d.getTime()+(c*24*60*60*1000));var e="; expires="+d.toGMTString()}else var e="";document.cookie=a+"="+b+e+"; path=/"};
function getCookie(a){var b=a+"=";var d=document.cookie.split(';');for(var i=0;i<d.length;i++){var c=d[i];while(c.charAt(0)==' ')c=c.substring(1,c.length);if(c.indexOf(b)==0)return c.substring(b.length,c.length)}return null};
function delCookie(a){setCookie(a,"",-1)};


function get_lang(){
   var e=getCookie('lang');
   if(!e)return;
   setCookie('lang',e,1);
   load_lang(e);
   document.getElementById('lang_select').value=e;
};

function set_lang(e){
   if(!e)return;
   setCookie('lang',e,1);
   load_lang(e);
   window.location.reload();
};

function load_lang(e){
   var a=document.createElement("script");
   a.type="text/javascript";
   a.id="aze_eng";
   a.async=!1;
   a.src="../translates/translate_"+e+".js";
   var b=document.getElementsByTagName("script")[0];
   b.parentNode.insertBefore(a,b);
};

get_lang();
</script>
Mamedov Samir7 писал(а) › 14 мар 2016, 16:06:тогда вы поможете ?

В пределах свободного времени и разумности бескорыстной помощи.


Re: Нужно определить язык пользователя и загрузить переводчи

Mamedov Samir7 » » Сообщение:

вот создал такую структуру ...

script Код: Выделить всё Развернуть
var country_language_az = {Azerbaijan:'Azerbaijan'};
var country_language_en = {American:'American'};
var country_language_ru = {Russian:'Russian'};

ymaps.ready(function() {
var country_name = ymaps.geolocation.country;
var new_tag='<div>';   

new_tag=new_tag+'<select id="user_language" onchange="set_lang()">';
for(var key in country_language_az) { new_tag=new_tag+"<option id='"+country_name+"_az' value="+key+">"+country_language_az[key]+"</option>"; }
for(var key in country_language_en) { new_tag=new_tag+"<option id='"+country_name+"_ru' value="+key+">"+country_language_en[key]+"</option>"; }
for(var key in country_language_ru) { new_tag=new_tag+"<option id='"+country_name+"_en' value="+key+">"+country_language_ru[key]+"</option>"; } 
new_tag=new_tag+'</select></div>';


document.getElementById('language').innerHTML = new_tag; });


    ymaps.ready(function() {
      var country = ymaps.geolocation.country;
     
      var a = document.createElement("script");
      a.type = "text/javascript";
      a.id = "Russian_" + country + "";
      a.async = !1;
      a.src = "../translates/lang_Russian_" + country + ".js";
      var b = document.getElementsByTagName("script")[0];
      b.parentNode.insertBefore(a, b);

      $('#country').html('' + country + '');
      $('#'+country+'_az').attr('disabled', true);
    
    });
   

function set_lang() {
   
   $("select#user_language option:selected").attr('disabled', true).siblings().removeAttr("disabled");
   
   

   }

мне такой подходит ..
но остался загрузит скрипт нужного языка и обратно ..

пример..
Пользователь из Азербайджана заходит сайт с России ,
Библиотека Яндекса определяет страну, и наш скрипт загружает нам вот эту

script Код: Выделить всё Развернуть
<script type="text/javascript" id="Azerbaijan_Russian" src="../translates/lang_Azerbaijan_Russian.js"></script>

Пользователя нужно язык Азербайджанский .
теперь надо так сделать чтоб, при выборе Azerbaijan Загрузился
вот это

script Код: Выделить всё Развернуть
<script type="text/javascript" id="Russian_Azerbaijan" src="../translates/lang_Russian_Azerbaijan.js"></script>

при выборе American загрузился

script Код: Выделить всё Развернуть
<script type="text/javascript" id="Russian_American" src="../translates/lang_Russian_Azerbaijan.js"></script>

а это удалялся

script Код: Выделить всё Развернуть
<script type="text/javascript" id="Russian_Azerbaijan" src="../translates/lang_Russian_Azerbaijan.js"></script>

и обратно , если по ошибке пользователь выбрал American потом выбрал Azerbaijan

один скрипт удалялся вставился нужный .

Огромное спасибо за помощь ...


Re: Нужно определить язык пользователя и загрузить переводчи

Admin » » Сообщение:

Mamedov Samir7 писал(а) › 14 мар 2016, 19:11:один скрипт удалялся вставился нужный .

Проще перезагружать страницу, чем искать и удалять ненужный скрипт.
Тем более, скрипт уже сделает свое дело, а это не всегда нужно.
Например.
Сайт на русском, скрипт определяет что язык пользователя - албанский, подключает и переводит текст с русского на албанский.
Потом пользователь думает, что все же Азербайджанский ему роднее, .. тыкает и подключает скрипт перевода текста ? с русского на азербайджанский или с с албанского на азербайджанский?..
---


Re: Нужно определить язык пользователя и загрузить переводчи

Mamedov Samir7 » » Сообщение:

Admin писал(а) › 14 мар 2016, 22:24:Сайт на русском, скрипт определяет что язык пользователя - албанский, подключает и переводит текст с русского на албанский.
Потом пользователь думает, что все же Азербайджанский ему роднее, .. тыкает и подключает скрипт перевода текста ? с русского на азербайджанский или с с албанского на азербайджанский?..

Да вроде такое..
Вот допустим в head есть такой скрипт с идом languages

script Код: Выделить всё Развернуть
<script id="languages" type="text/javascript" src="lang_Azeribaijan"></script>

есть такие кнопки при выборе селект

html Код: Выделить всё Развернуть
<select id="user_language" onchange="set_lang();"><option id="Azerbaijan_az" value="Azerbaijan_en" disabled="disabled">Azerbaijan</option><option id="Azerbaijan_en" value="Azerbaijan_en">American</option><option id="Azerbaijan_ru" value="Azerbaijan_ru">Russian</option></select>

теперь с помощью скрипта надо так сделать чтоб при выборе American в head удалялся вызов lang_Azeribaijan и вставился lang_American при выборе Russian удалялся lang_American вставился lang_Russian
я в буттон клик функции этого делать умею но в option:selected не как не смог разобраться
помогите плизз ....


Re: Нужно определить язык пользователя и загрузить переводчи

Admin » » Сообщение:

Mamedov Samir писал(а) › 16 мар 2016, 17:24:теперь с помощью скрипта надо так сделать чтоб при выборе American в head удалялся вызов lang_Azeribaijan и вставился lang_American при выборе Russian удалялся lang_American вставился lang_Russian

Вижу, вы не поняли меня..
Ну ладно.
Вот так:

Код: Выделить всё Развернуть
<script id="languages" type="text/javascript" src="lang_Azeribaijan.js"></script>

<select id="user_language" onchange="set_lang(this.value);">
   <option value="Azerbaijan_az">Azerbaijan</option>
   <option value="Azerbaijan_en">American</option>
   <option value="Azerbaijan_ru">Russian</option>
</select>

<script type="text/javascript">
function set_lang(e){
   if(!e&&!document.getElementById('languages'))return;
    var o=document.getElementById('languages');
    o.parentNode.removeChild(o);
    o.src=e+'.js';
    document.getElementsByTagName('head')[0].appendChild(o);
};
</script>

Re: Нужно определить язык пользователя и загрузить переводчи

Mamedov Samir7 » » Сообщение:

Admin писал(а) › 16 мар 2016, 23:58:Вижу, вы не поняли меня.

Я вас хорошо понимаю .. но в юкозе не возможно сделать сайт на разных языках , вы сами этого знаете.. по этому решил так сделать ..

Admin писал(а) › 16 мар 2016, 23:58:Вот так:

таким образом в head отлично меняется имя выбираемого страны.. но почему то скрипт не взаимадействуеть на перевод при замене имя скрипта в head... я так думаю что, при загрузке страницы тот первый скрипт вставляется в дом.. а потом после вашего скрипта мы меняем только линк, и по этому нет реакция ..

я чуть переработал над вашем скриптом чтоб менялся целиком, но почему то опять не меняется ..
вот тот скрипт переработанный

script Код: Выделить всё Развернуть
<script>
function set_lang(e){
   var o = document.createElement("script");
   if(!e&&!document.getElementById('languages'))return;
    var o=document.getElementById('languages');
   o.type = "text/javascript";
   o.id = "languages";
   o.async = !1;
    o.parentNode.removeChild(o);
    o.src="../translates/lang_"+e+".js";
   var b = document.getElementsByTagName("script")[0];
   b.parentNode.insertBefore(o, b);
   };
</script>

вот есть еще скрипт нашел в одном сайте и переобработал ,

script Код: Выделить всё Развернуть
<script>
   function set_lang(e){
      var a = document.createElement("script");
      a.type = "text/javascript";
      a.id = "languages";
      a.async = !1;
      a.src = "../translates/lang_"+e+".js";
      var b = document.getElementsByTagName("script")[0];
      b.parentNode.insertBefore(a, b);

   };
</script>

С этом скриптом при выборе имя страну переводится на нужный язык отлично , но тут есть тоже одно проблема, который при выставление нового скрипта в head другой не удаляется , если последовательно набрать несколько раз имя разных страны в head будет создаться скрипты на тот страны,
я так думаю что есть 2 решение...
первый решение это ваш скрипт доработать, так чтоб при смене линк обновился дом как то ajax функцией,
второй решение это, чтоб мой скрипт который нашел, добавить функции , при смене линка не менять только линк , менять целиком, либо удалит тот на место его вставить нужную ...


Re: Нужно определить язык пользователя и загрузить переводчи

Admin » » Сообщение:

Mamedov Samir писал(а) › 17 мар 2016, 11:38:я так думаю что, при загрузке страницы тот первый скрипт вставляется в дом.. а потом после вашего скрипта мы меняем только линк, и по этому нет реакция ..

Если вы более внимательно посмотрите:

Код: Выделить всё Развернуть
<script type="text/javascript">
function set_lang(e){
   if(!e&&!document.getElementById('languages'))return;
    var o=document.getElementById('languages');
    o.parentNode.removeChild(o);
    o.src=e+'.js';
    document.getElementsByTagName('head')[0].appendChild(o);
};
</script>

то увидите, что:

Код: Выделить всё Развернуть
o.parentNode.removeChild(o);

удаляет предыдущий скрипт, а:

Код: Выделить всё Развернуть
document.getElementsByTagName('head')[0].appendChild(o);

добавляет новый.

Особенно четко это видно, если добавить тайм-аут:

Код: Выделить всё Развернуть
function set_lang(e){
   if(!e&&!document.getElementById('languages'))return;
    var o=document.getElementById('languages');
    o.parentNode.removeChild(o);
    o.src=e+'.js';
      setTimeout(function(){
         document.getElementsByTagName('head')[0].appendChild(o);
      },1000);
};
Mamedov Samir писал(а) › 17 мар 2016, 11:38:но почему то скрипт не взаимадействуеть на перевод

Ссылку на то, где это все происходит можно?
---

Mamedov Samir писал(а) › 17 мар 2016, 11:38:первый решение это ваш скрипт доработать

Если вы считаете, то попробуйте вот так:

Код: Выделить всё Развернуть
function set_lang(e){
   if(!e&&!document.getElementById('languages'))return;
   var o=document.getElementById('languages');
   o.parentNode.removeChild(o);
   o = document.createElement('script');
   o.type = 'text/javascript';
   o.id = 'languages';
   o.async = !1;
   o.src=e+'.js';
   document.getElementsByTagName('head')[0].appendChild(o);
};

Re: Нужно определить язык пользователя и загрузить переводчи

Mamedov Samir7 » » Сообщение:

Admin писал(а) › 17 мар 2016, 12:11:Если вы считаете, то вот так:
КОД: ВЫДЕЛИТЬ ВСЁ РАЗВЕРНУТЬ
function set_lang(e){
   if(!e&&!document.getElementById('languages'))return;
   var o=document.getElementById('languages');
   o.parentNode.removeChild(o);
   o = document.createElement('script');
   o.type = 'text/javascript';
   o.id = 'languages';
   o.async = !1;
   o.src=e+'.js';
   document.getElementsByTagName('head')[0].appendChild(o);
};

Супер.. это вариант сработало ... Спасибо вам Огромное ... вы лучший знающий на всех скриптах который я знаю...


След.



Похожие темыКомментарии ПросмотрыПоследнее сообщение
0621Открытие профиля пользователя в нов...
Сообщение от: Admin
21546Re: Закладки пользователя для сайта...
Сообщение от: Admin
0861Ссылка на посты и темы текущего пол...
Сообщение от: Admin
1598Re: Ссылка на материал на странице ...
Сообщение от: Герук Юра
1699Re: Проверка на подтверждение е-май...
Сообщение от: Kzander