Перейти к содержанию
Zaurius

Нужна помощь по Java

Рекомендуемые сообщения

Помогите с мультиязыком на сайте. Есть модуль комментариев на русском языке. Я исправил там некоторые строки и сделал его мультиязычным, но дело в том, что некоторые слова написанны напрямую в java файл и не поддаются переводу. Например вот такой код..

 

var ivotings = Array();
var ar_elm = Array();
var i_elm = 0;
var itemvotin = '';
var votingfiles = 'catalog/controller/voting/';
var advote = 0;

var getVotsElm = function () {
  var obj_div = document.getElementsByTagName('div');
  var nrobj_div = obj_div.length;
  for(var i=0; i<nrobj_div; i++) {
    if(obj_div[i].className && obj_div[i].id) {
	    var elm_id = obj_div[i].id;
      if((obj_div[i].className=='vot_plus' || obj_div[i].className=='vot_updown1' || obj_div[i].className=='vot_updown2') && elm_id.indexOf("vt_")==0) {
        ivotings[elm_id] = obj_div[i];
        ar_elm[i_elm] = elm_id;
        i_elm++;
      }
    }
  }
  if(ar_elm.length>0) votAjax(ar_elm, '');
};

function addVotData(elm_id, vote, nvotes, renot) {
  if(ivotings[elm_id]) {
    var clik_up = (renot == 0) ? ' onclick="addVote(this, 1)"' : ' onclick="alert(\'Вы уже голосовали за этот отзыв\')"';

      var nvup = (nvotes*1 + vote*1) /2;
      var nvdown = nvotes - nvup;
      var clik_down = (renot == 0) ? ' onclick="addVote(this, -1)"' : ' onclick="alert(\'Вы уже голосовали за этот отзыв\')"';

      ivotings[elm_id].innerHTML = '<span style="color: #666;">Отзыв полезен? <a id="yesvot" '+ clik_up+ '>Да</a> <b id="nvup">'+ nvup+ '</b> / <a id="novot" '+ clik_down+ '>Нет</a> <b id="nvdown">'+ nvdown+ '</b></span>';
  }
}

function addVote(ivot, vote) {
  if(advote == 0) {
    var elm = Array();
    elm[0] = ivot.parentNode.parentNode.id;

    votAjax(elm, vote);
  }
  else alert('Вы уже голосовали');
}

function get_XmlHttp() {
  var xmlHttp = null;
  if(window.XMLHttpRequest) xmlHttp = new XMLHttpRequest();
  else if(window.ActiveXObject) xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  return xmlHttp;
}

function votAjax(elm, vote) {
  var cerere_http =  get_XmlHttp();

  var datasend = Array();
  for(var i=0; i<elm.length; i++) datasend[i] = 'elm[]='+elm[i];
  datasend = datasend.join('&')+'&vote='+vote;

  cerere_http.open("POST", votingfiles+'voting.php', true);

  cerere_http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  cerere_http.send(datasend);

  cerere_http.onreadystatechange = function() {
    if (cerere_http.readyState == 4) {
      eval("var jsonitems = "+ cerere_http.responseText);
      if (jsonitems) {
        for(var votitem in jsonitems) {
          var renot = jsonitems[votitem][2];
           if(renot == 3) {
            alert("Вы уже проголосовали 3 раза \n Вы можете продолжить завтра");
            window.location.reload(true);
          }
          else addVotData(votitem, jsonitems[votitem][0], jsonitems[votitem][1], renot);
        }
      }
      if(vote != '' && (renot == undefined || renot == 2)) advote = 1;
	  }
  }
}
function addLoadVote(func) {
  var oldonload = window.onload; 
  if (typeof window.onload != 'function') window.onload = func;
  else { 
    window.onload = function() { 
      if (oldonload) { oldonload(); } 
      func();
    } 
  } 
}
addLoadVote(getVotsElm);

как видите присутствуют русские слова. Как мне сделать, чтобы данный файл обращался к языковому пакету и переводил соответственно выбранному языку на сайте? 
Надеюсь смог объяснить )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 И самое важное
java != js

2.

Идем в header.tpl
и перед body
<script>
var lang= '<?php echo $this->config->get('config_language'); ?>';
</script>

В вашем скрипте создавайте языковые массивы
 

if(renot == 3) {
msg['ru'] = "Вы уже проголосовали 3 раза \n Вы можете продолжить завтра";
msg['en'] = "Вы уже проголосовали 3 раза \n Вы можете продолжить завтра";

alert(msg[lang]);
window.location.reload(true);

или

<script>
var msg =  'Взять нужное сообщение из языкового файла'
</script>

 

А в самом скрипте

alert(msg)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 И самое важное

java != js

2.

Идем в header.tpl

и перед body

<script>

var lang= '<?php echo $this->config->get('config_language'); ?>';

</script>

В вашем скрипте создавайте языковые массивы

 

if(renot == 3) {
msg['ru'] = "Вы уже проголосовали 3 раза \n Вы можете продолжить завтра";
msg['en'] = "Вы уже проголосовали 3 раза \n Вы можете продолжить завтра";

alert(msg[lang]);
window.location.reload(true);

или

<script>

var msg =  'Взять нужное сообщение из языкового файла'

</script>

 

А в самом скрипте

alert(msg)

 

 

А как тут сделать? 

 

  1. var clik_up = (renot == 0) ? ' onclick="addVote(this, 1)"' : ' onclick="alert(\'Вы уже голосовали за этот отзыв\')"';
  2.  
  3. var nvup = (nvotes*1 + vote*1) /2;
  4. var nvdown = nvotes - nvup;
  5. var clik_down = (renot == 0) ? ' onclick="addVote(this, -1)"' : ' onclick="alert(\'Вы уже голосовали за этот отзыв\')"';
  6.  
  7. ivotings[elm_id].innerHTML = '<span style="color: #666;">Отзыв полезен? <a id="yesvot" '+ clik_up+ '>Да</a> <b id="nvup">'+ nvup+ '</b> / <a id="novot" '+ clik_down+ '>Нет</a> <b id="nvdown">'+ nvdown+ '</b></span>';

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если скритп прописывается в шаблоне, что можно через контроллер передавать мультиязычные значения, впредь прописав в нужных файлах, и получится что то типа:

var clik_up = (renot == 0) ? ' onclick="addVote(this, 1)"' : ' onclick="alert(\'<?php echo $already_rated; ?>\')"';
 
var nvup = (nvotes*1 + vote*1) /2;
var nvdown = nvotes - nvup;
var clik_down = (renot == 0) ? ' onclick="addVote(this, -1)"' : ' onclick="alert(\'<?php echo $already_rated_this; ?>\')"';
 
ivotings[elm_id].innerHTML = '<span style="color: #666;"><?php echo $helped; ?><a id="yesvot" '+ clik_up+ '><?php echo $text_yes; ?></a> <b id="nvup">'+ nvup+ '</b> / <a id="novot" '+ clik_down+ '><?php echo $text_no; ?></a> <b id="nvdown">'+ nvdown+ '</b></span>';

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если скритп прописывается в шаблоне, что можно через контроллер передавать мультиязычные значения, впредь прописав в нужных файлах, и получится что то типа:

var clik_up = (renot == 0) ? ' onclick="addVote(this, 1)"' : ' onclick="alert(\'\')"'; var nvup = (nvotes*1 + vote*1) /2;var nvdown = nvotes - nvup;var clik_down = (renot == 0) ? ' onclick="addVote(this, -1)"' : ' onclick="alert(\'\')"'; ivotings[elm_id].innerHTML = ' '+ nvup+ ' /  '+ nvdown+ '';

Я пробовал это. Не получилось. Может я что-то не правильно делал или скрипт недопилен. Может я отправлю вам сам модуль и вы посмотрите я не то делаю или скрипт не правильно написан? 

Прикрепляю оригинал...

reviews-stars-v2.1.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну конечно я щас отложу все, скачаю скрипт, установлю на сайте и начну тестировать...

 

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

 

P.S. Глянул бегло код, скрипт отдельно подгружается, оптимальней всего на такие функции подгружать доп параметр типа language_code а далее, по логике, которую описал chukcha...

Например есть:

function addVotData(elm_id, vote, nvotes, renot) {
  if(ivotings[elm_id]) {
    var clik_up = (renot == 0) ? ' onclick="addVote(this, 1)"' : ' onclick="alert(\'Вы уже голосовали за этот отзыв\')"';

      var nvup = (nvotes*1 + vote*1) /2;
      var nvdown = nvotes - nvup;
      var clik_down = (renot == 0) ? ' onclick="addVote(this, -1)"' : ' onclick="alert(\'Вы уже голосовали за этот отзыв\')"';

      ivotings[elm_id].innerHTML = '<span style="color: #666;">Отзыв полезен? <a id="yesvot" '+ clik_up+ '>Да</a> <b id="nvup">'+ nvup+ '</b> / <a id="novot" '+ clik_down+ '>Нет</a> <b id="nvdown">'+ nvdown+ '</b></span>';
  }
}

поменять на:

function addVotData(elm_id, vote, nvotes, renot, lang) {
  if (lang == 1) { //id Rus
    var message_1 = 'Сообщение 1 на рус';
    var message_2 = 'Сообщение 2 на рус';
  }elseif(lang == 2) { // Ukr
    var message_1 = 'Сообщение 1 на укр';
    var message_2 = 'Сообщение 2 на укр';
  }else{ //Вообще нерусский
    var message_1 = 'message 1 for eng';
    var message_2 = 'message 2 for eng';
  }
  if(ivotings[elm_id]) {
    var clik_up = (renot == 0) ? ' onclick="addVote(this, 1)"' : ' onclick="alert(' + message_1 + ')"';

      var nvup = (nvotes*1 + vote*1) /2;
      var nvdown = nvotes - nvup;
      var clik_down = (renot == 0) ? ' onclick="addVote(this, -1)"' : ' onclick="alert(' + message_2 + ')"';

      ivotings[elm_id].innerHTML = '<span style="color: #666;">Отзыв полезен? <a id="yesvot" '+ clik_up+ '>Да</a> <b id="nvup">'+ nvup+ '</b> / <a id="novot" '+ clik_down+ '>Нет</a> <b id="nvdown">'+ nvdown+ '</b></span>';
  }
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я делаю как ты предложил. 

Ставлю в header.tpl перед body

<script>
var lang= '<?php echo $this->config->get('config_language'); ?>';

</script>

 

потом в voting.js ставлю 

 

function addVotData(elm_id, vote, nvotes, renot, lang) {
if (lang == 1) { //id Rus
var message_1 = 'Сообщение 1 на рус';
var message_2 = 'Сообщение 2 на рус';
}else if (lang == 2) { // En
var message_1 = 'Сообщение 1 на анг';
var message_2 = 'Сообщение 2 на анг';
}else (lang == 3){ //Az

var message_1 = 'message 1 for aze';
var message_2 = 'message 2 for aze;
}
if(ivotings[elm_id]) {
var clik_up = (renot == 0) ? ' onclick="addVote(this, 1)"' : ' onclick="alert(' + message_1 + ')"';

var nvup = (nvotes*1 + vote*1) /2;
var nvdown = nvotes - nvup;
var clik_down = (renot == 0) ? ' onclick="addVote(this, -1)"' : ' onclick="alert(' + message_2 + ')"';

ivotings[elm_id].innerHTML = '<span style="color: #666;">Отзыв полезен? <a id="yesvot" '+ clik_up+ '>Да</a> <b id="nvup">'+ nvup+ '</b> / <a id="novot" '+ clik_down+ '>Нет</a> <b id="nvdown">'+ nvdown+ '</b></span>';
}
}

 

сделал так теперь сообщение вообще не выскакивает :) id языков у меня в базе 
1-ru, 2-en, 3-az

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.