Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Zaurius

Recommended Posts

Помогите с мультиязыком на сайте. Есть модуль комментариев на русском языке. Я исправил там некоторые строки и сделал его мультиязычным, но дело в том, что некоторые слова написанны напрямую в 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 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.