Автор Тема: FarStone VirtualDrive Pro 11.7  (Прочитано 25170 раз)

Оффлайн Archiv@rius_31

  • Новичок
  • *
  • Сообщений: 23
FarStone VirtualDrive Pro 11.7
« : 05 Июля 2009, 21:12:55 »
Всем здравствуйте. Занялся переводом программы FarStone VirtualDrive 11, первую, ресурсную, часть перевода выполнил без особых трудностей, а на русификации веб-интерфейса немного застрял.
Так, при редактировании xml-файлов, содержащих нужные строки, вместо русского текста в программе видна казя-базя с китайскими иероглифами. При изменении кодировки в заголовке файла символы меняются, но русского текста по прежнему не видно. Сохранение самого файла в другой кодировке тоже особых результатов не дает.   Как быть? Пробовал utf-8, utf-16, cp1251, iso 8859-5, бесполезно.

xml-файл и снимок части окна программы в прикрепленном архиве.
« Последнее редактирование: 20 Июля 2009, 08:59:24 от shkiper »
...И пускай фонари светят ярче далеких звезд -
Фонари все погаснут, а звезды будут светить.
(©В. Цой)

Оффлайн shkiper

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 1095
FarStone VirtualDrive Pro 11.7
« Ответ #1 : 06 Июля 2009, 14:42:48 »
Сегодня примерно час убил чтоб разобраться - ни в какую не поддается. Я думаю дело в каком-нибудь веб-компоненте, отвечающем за отрисовку меню, в котором нет поддержки кирилицы в принципе. Плюс там очень много скриптов, может в них надо где-то принудительно эту кодировку вписать? Я с HTML дружу, и в них вроде все в порядке, а вот со скриптами не очень.
DJ, sex, music and a rhythm...

Оффлайн Archiv@rius_31

  • Новичок
  • *
  • Сообщений: 23
FarStone VirtualDrive Pro 11.7
« Ответ #2 : 07 Июля 2009, 13:57:32 »
Вчера все-таки решил, поставил себе на вторую винду глючную 10 версию (чем, правда, изрядно искалечил систему) и русифицировал русификатором от Dr.Ross с бэкапом файлов. Среди русифицированных библиотек там был один xml-файл, и в программе все строки из него отображались корректно. Файл был русифицирован и сохранен в формате utf-8. Попробовал сделать также на 11 версии - не прокатило. Может поддержка русской кодировки отсутствует в самом exe-шнике(ах)? Как это узнать? И если да, то как пропатчить?

Со скриптами я и сам не дружу, хотя открывал их вчера - вроде бы текстов, напоминающих названия кодировок, не нашел.
А вообще, как эту кодировку там поставить, если можно это сделать?
« Последнее редактирование: 07 Июля 2009, 13:58:18 от Archiv@rius_31 »
...И пускай фонари светят ярче далеких звезд -
Фонари все погаснут, а звезды будут светить.
(©В. Цой)

Оффлайн Solenij

  • Модератор
  • Старожил
  • *****
  • Сообщений: 487
    • http://unpacking.narod.ru
FarStone VirtualDrive Pro 11.7
« Ответ #3 : 07 Июля 2009, 14:38:58 »
Цитата: Archiv@rius_31
Может поддержка русской кодировки отсутствует в самом exe-шнике(ах)? Как это узнать? И если да, то как пропатчить?
Скорее всего не в этом причина. Я так понял, что остальное всё нормально переводится и поддерживается кроме этого меню?! Значит экзешник поддерживает кириллицу, а иначе бы всё остальное тоже было бы иероглифами. Скорее всего где-то в скриптах надо копать.
Уважайте труд других людей - они будут уважать Ваш!!!

Оффлайн Archiv@rius_31

  • Новичок
  • *
  • Сообщений: 23
FarStone VirtualDrive Pro 11.7
« Ответ #4 : 07 Июля 2009, 22:36:30 »
Да, все перевелось нормально. Более того, начал переводить аналогичный строчный xml в другой папке - все отображается корректно.
В скриптах не знаю, где копать, где нужный скрипт лежит, хотя подозреваю, что лежит он в папке в папке mainui\js
На всякий случай прикрепляю архив со скриптами.
Поиском найти в файлах ссылку на требуемый reg0409.xml не получилось - вероятно, зашито в программном коде. Может быть, только если с помощью каких-нибудь утилит поискать... Но имеет ли смысл?  
...И пускай фонари светят ярче далеких звезд -
Фонари все погаснут, а звезды будут светить.
(©В. Цой)

Оффлайн Godless

  • Новичок
  • *
  • Сообщений: 11
FarStone VirtualDrive Pro 11.7
« Ответ #5 : 08 Июля 2009, 09:40:01 »
Archiv@rius_31
Попробуй этот командник. Он заменяет кодовые страницы в реестре, меняет шрифты на способные к кириллице и сразу же перезагружает систему

Оффлайн Archiv@rius_31

  • Новичок
  • *
  • Сообщений: 23
FarStone VirtualDrive Pro 11.7
« Ответ #6 : 08 Июля 2009, 19:01:08 »
Цитата: Godless
Попробуй этот командник. Он заменяет кодовые страницы в реестре, меняет шрифты на способные к кириллице и сразу же перезагружает систему
С кодировкой в системе и так у меня вроде бы все в порядке. Но все равно запустил. Не помогло. По прежнему тарабарщина.  
...И пускай фонари светят ярче далеких звезд -
Фонари все погаснут, а звезды будут светить.
(©В. Цой)

Оффлайн Archiv@rius_31

  • Новичок
  • *
  • Сообщений: 23
FarStone VirtualDrive Pro 11.7
« Ответ #7 : 09 Июля 2009, 08:06:37 »
А может ли быть проблема в файле webmenu.ocx? Еще при ресурсном переводе заметил в нем значки, которые в меню вырисовываются. И рисуночек самого меню есть там, правда в англицком варианте. Зачем - неизвестно.
...И пускай фонари светят ярче далеких звезд -
Фонари все погаснут, а звезды будут светить.
(©В. Цой)

Оффлайн shkiper

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 1095
FarStone VirtualDrive Pro 11.7
« Ответ #8 : 09 Июля 2009, 08:23:33 »
Я на этот файл сразу внимание обратил, из-за имени. Эксперименты с ним результата не дали, и вообще, как я понял он вроде отвечает за меню в трее.
DJ, sex, music and a rhythm...

Оффлайн Archiv@rius_31

  • Новичок
  • *
  • Сообщений: 23
FarStone VirtualDrive Pro 11.7
« Ответ #9 : 09 Июля 2009, 22:36:36 »
shkiper, наверное, нет. Переименовал webmenu.ocx, запустил uiframe.exe - выдал ошибку скрипта в файле main.htm, окно виртуалки не загрузилось, несмотря на то, что процесс продолжал висеть. Тем не менее, значок в панели задач появился вместе с работающим меню.
Буду пока копать main.htm и скрипты, с ним связанные.

Покопал. Вот какой фрагмент скрипта нашел непосредственно в тексте веб-страницы:

////////////////////////////////////////  Globle var for top menu
var sdObj = document.createElement("div")
var menuUpObj = null;
var submenuIsOpen = false;
var currentOpenedTopMenuButton = null;
var fffa;
var globeTopMenuListArray;
fffa=getCloseTopMenuFunction(null);
////////////////////////////////////////  Globle var for top menu end

//add menu list into array
var topMenuListArr=new Array();
//topMenuListArr.push(document.getElementById("[color=#9932CC][i]fileTopMenu[/i][/color]"));
//topMenuListArr.push(document.getElementById("[color=#9932CC][i]toolsTopMenu[/i][/color]"));
//topMenuListArr.push(document.getElementById("[color=#9932CC][i]helpTopMenuA[/i][/color]"));
globeTopMenuListArray = topMenuListArr;
//add menu list into array finish
for (i=0;i<topMenuListArr.length;i++) {
//set every menu mouseover effect
topMenuListArr[i].onmouseover=function() {
isMove=false;
this.style.backgroundColor="#316AC5";
this.style.color="#ffffff";
if(submenuIsOpen) {
try {
currentOpenedTopMenuButton.style.backgroundColor="";
currentOpenedTopMenuButton.style.color="#000000";
currentOpenedTopMenuButton=null;
menuUpObj.style.visibility="hidden";
sdObj.style.visibility="hidden";
}
catch(e){}
iniTopMenu(this);
}
}
//set every menu mouseout effect
topMenuListArr[i].onmouseout=function() {
if (!submenuIsOpen) {
isMove=true;
this.style.backgroundColor="";
this.style.color="#000000";
}
}
}


////////////////////////////////////////////////////////////////
По запросу "fileTopMenu" наткнулся на файл main_only.js с таким вот участком скрипта:
[code]////////////////////webmenu function//////////////////////////////////////
function iniTopMenu(clickedObj)
{
currentOpenedTopMenuButton=clickedObj;
var menuTopLevelObj=document.getElementById(clickedObj.submenuid);
menuUpObj=menuTopLevelObj

appendedTopItem=clickedObj;
//alert(menuTopLevelObj.clientWidth)
menuTopLevelObj.style.left=-clickedObj.clientWidth+"px";
sdObj.className=("menushadow")
sdObj.style.height=menuTopLevelObj.clientHeight+"px";
sdObj.style.width=menuTopLevelObj.clientWidth+"px";
sdObj.style.top=(parseInt(menuTopLevelObj.offsetTop)+4)+"px";
sdObj.style.left=(parseInt(menuTopLevelObj.offsetLeft)+4)+"px";
clickedObj.parentNode.appendChild(sdObj);
menuTopLevelObj.style.visibility="visible";
sdObj.style.visibility="visible";

//alert(menuTopLevelObj.visibility)
var subMenuArr=menuTopLevelObj.childNodes;
for (i=0;i<subMenuArr.length;i++) {
subMenuArr[i].onmouseover=function() {
isMove=false;
var thisMenuSubListArr=this.parentNode.childNodes;
for (i=0;i<thisMenuSubListArr.length;i++) {
if (thisMenuSubListArr[i].className=="upMenuStyle") {
thisMenuSubListArr[i].style.backgroundImage="url(images/topMenuDiv.jpg)";
}
thisMenuSubListArr[i].style.backgroundColor="";
thisMenuSubListArr[i].style.color="#000000";
}
if (this.className=="upMenuStyle") {
this.style.backgroundImage="none";
}
this.style.backgroundColor="#316AC5";
this.style.color="#ffffff";
}
subMenuArr[i].onmouseout=function() {
isMove=true;
if (this.className=="upMenuStyle") {
this.style.backgroundImage="url(images/topMenuDiv.jpg)";
}
this.style.backgroundColor="";
this.style.color="#000000";
}
subMenuArr[i].onclick=function() {
menuFireEvent(this.iid)
}
}
submenuIsOpen=true;
}

function appendSubmenu(clickedObj) {
setTimeout(clickTimeout(clickedObj),20)
}
function clickTimeout(obj) {
return function() {
iniTopMenu(obj);
}
}

//submenu click
function menuFireEvent(id) {
fffa();
alert(id);
// if (id==11) {
// window.external.OnClose();
// }
// if (id==21) {
// if (window.external.IsPendClose()==true) {
// return;
// }
// clickNavButton(1);
// }
// if (id==22) {
// if (window.external.IsPendClose()==true) {
// return;
// }
// clickNavButton(6);
// }
// if (id==23) {
// if (window.external.IsPendClose()==true) {
// return;
// }
// clickNavButton(5);
// }
// if (id==31) { }
// if (id==34) {
// var isDoingThing=window.external.IsPendClose()
// window.external.PendClose(false);
// window.external.Navigate("mainui/about.htm",320,420);
// }
}

function closeTopSubNenu() {
if (currentOpenedTopMenuButton==null) {
return;
}
var parentMenuObj=document.getElementById(currentOpenedTopMenuButton.submenuid);
if (parentMenuObj==null) {
return;
}
var listArray1=parentMenuObj.childNodes;
for(i=0;i<listArray1.length;i++) {
if (listArray1[i].style.backgroundColor=="") { continue; }
listArray1[i].style.backgroundColor="";
listArray1[i].style.color="#000000";
if (listArray1[i].className=="upMenuStyle") {
listArray1[i].style.backgroundImage="url(images/topMenuDiv.jpg)";
}
}
currentOpenedTopMenuButton.style.backgroundColor="";
currentOpenedTopMenuButton.style.color="#000000";
currentOpenedTopMenuButton=null;
menuUpObj.style.visibility="hidden";
sdObj.style.visibility="hidden";
submenuIsOpen=false;
}
function showFileMenu() {
if(currentOpenedTopMenuButton!=null) { closeTopSubNenu(); }
var fileMenuTopObj=document.getElementById("fileTopMenu");
fileMenuTopObj.focus();
currentOpenedTopMenuButton=fileMenuTopObj;
submenuIsOpen=true;
fileMenuTopObj.style.backgroundColor="#316AC5";
fileMenuTopObj.style.color="#ffffff";
setTimeout(clickTimeout(fileMenuTopObj),20)
}
function showToolsMenu() {
if(currentOpenedTopMenuButton!=null) { closeTopSubNenu(); }
var toolsMenuTopObj=document.getElementById("toolsTopMenu");
toolsMenuTopObj.focus();
currentOpenedTopMenuButton=toolsMenuTopObj;
submenuIsOpen=true;
toolsMenuTopObj.style.backgroundColor="#316AC5";
toolsMenuTopObj.style.color="#ffffff";
setTimeout(clickTimeout(toolsMenuTopObj),20)
}
function showHelpMenu() {
if(currentOpenedTopMenuButton!=null) { closeTopSubNenu(); }
var helpMenuTopObj=document.getElementById("helpTopMenuA");
helpMenuTopObj.focus();
currentOpenedTopMenuButton=helpMenuTopObj;
submenuIsOpen=true;
helpMenuTopObj.style.backgroundColor="#316AC5";
helpMenuTopObj.style.color="#ffffff";
setTimeout(clickTimeout(helpMenuTopObj),20)
}
////////////////////webmenu function//////////////////////////////////////

Вопрос: куда дописывать команды, задающие кодировку?
« Последнее редактирование: 21 Января 2018, 01:46:08 от ZeroChaos »
...И пускай фонари светят ярче далеких звезд -
Фонари все погаснут, а звезды будут светить.
(©В. Цой)

Оффлайн VIPer

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 1063
FarStone VirtualDrive Pro 11.7
« Ответ #10 : 12 Июля 2009, 01:31:54 »
Для вашего случая статья:
http://www.javaportal.ru/java/articles/rus...s/ruschars.html

СССР

Оффлайн Archiv@rius_31

  • Новичок
  • *
  • Сообщений: 23
FarStone VirtualDrive Pro 11.7
« Ответ #11 : 15 Июля 2009, 11:06:26 »
Статья не помогла. Искал в файлах поисковиком указанные команды - не нашел. Может быть, существуют какие-нибудь вариации?
Можно было бы, конечно, попытаться принудительно перекодировать - только не знаю, куда и в какое место вставлять нужные команды - в яваскриптах я чайник. Ни в одном скрипте не нашел прямую ссылку на требуемый xml-файл. Нет их и в main.htm.
Может быть, только если попробовать поставить, например, немецкую версию со знаками диакритики, может быть в тех скриптах строчка перекодировки будет?

Не хотелось бы, оставлять меню непереведеным или nuCATb AHI'/|uuCKuMu bYKBAMu.
Как быть? помогите плз!
...И пускай фонари светят ярче далеких звезд -
Фонари все погаснут, а звезды будут светить.
(©В. Цой)

Оффлайн Archiv@rius_31

  • Новичок
  • *
  • Сообщений: 23
FarStone VirtualDrive Pro 11.7
« Ответ #12 : 15 Июля 2009, 22:50:47 »
Кое-что нашел в main.htm

var isMove = true;//vindow move flag
document.body.onload=function()
{


//var showpage=globalset.GetShowPageSetting();
//alert(showpage);
//jumpFlag(2);
//if(showpage==0)
//{
//jumpFlag(1);
//changeMenu(1);
//}
//else if(showpage==1)
//{
jumpFlag(2);
//changeMenu(0);
//}
//Marktest.WhetherShow(32707,0);



var version=langobj.GetVersionSign(window.external.GetProductID());
//alert(version);
var prodlang = langobj.GetInstallLanguage(window.external.GetProductID()).toString(16);
if(version!=0)
{
//Marktest.WhetherShow(34, 0);
//Marktest.UpdateItemState(32,0,0);
Marktest.InitWebMenu("WMRes0" + prodlang + ".xml");
}
else
{
//Marktest.WhetherShow(34, 1);
//Marktest.UpdateItemState(32,0,1);
Marktest.InitWebMenu("reg0" + prodlang + ".xml");
}

menuFocus(1);
$("menuflag_1").attachEvent("onclick",menuhit1);
$("menuflag_2").attachEvent("onclick",menuhit2);
$("menuflag_3").attachEvent("onclick",menuhit3);
$("menuflag_4").attachEvent("onclick",menuhit4);
$("top_vcdlibary").attachEvent("onclick",tophit2);
$("top_flist").attachEvent("onclick",tophit1);

window.external.SetBroWindowPos(-1,-1,778,572,0x40);

if(langid!=2052&&langid!=1033&&langid!=1028)
{
$("menuflag_4").style.display="none";
}

showui();
}

Пробовал подставить вот это:
Цитировать
String s = baos.toString();
и это

import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class CharsetFilter implements Filter
{
// кодировка
private String encoding;

public void init(FilterConfig config) throws ServletException
{
 // читаем из конфигурации
 encoding = config.getInitParameter("requestEncoding");

 // если не установлена - устанавливаем Cp1251
 if( encoding==null ) encoding="Cp1251";
}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain next)
throws IOException, ServletException
{
 request.setCharacterEncoding(encoding);
 next.doFilter(request, response);
}

public void destroy(){}
}

<!--CharsetFilter start-->

 <filter>
   <filter-name>Charset Filter</filter-name>
   <filter-class>CharsetFilter</filter-class>
    <init-param requestEncoding='Cp1251'/>
 </filter>

 <filter-mapping>
   <filter-name>Charset Filter</filter-name>
   <url-pattern>/*</url-pattern>
 </filter-mapping>

<!--CharsetFilter end-->
- пока не получилось.
Может быть есть еще какие-нибудь варианты?
« Последнее редактирование: 21 Января 2018, 01:54:31 от ZeroChaos »
...И пускай фонари светят ярче далеких звезд -
Фонари все погаснут, а звезды будут светить.
(©В. Цой)

Оффлайн NedMaker

  • Администратор
  • Ветеран
  • *****
  • Сообщений: 1130
  • The Vigilant Observer
    • nrgizer.msilab.net
FarStone VirtualDrive Pro 11.7
« Ответ #13 : 16 Июля 2009, 00:23:28 »
Тема перемещена в новый форум, специально созданный для решения подобных проблем.

Оффлайн Archiv@rius_31

  • Новичок
  • *
  • Сообщений: 23
FarStone VirtualDrive Pro 11.7
« Ответ #14 : 16 Июля 2009, 22:22:54 »
Слава Богу!!! Перевел!!!  
Русифицировать получилось не совсем обычным, но в то же время довольно простым (хотя мне до сих пор не совсем понятным из-за поведения...) способом. Обо всем по порядку.
Одно хочу сказать: скрипты тут были ни при чем. Как я и предполагал насчет версии с другим языком, помогла французская версия. После ее установки на свежую систему обнаружил в одном из пунктов меню букву "й". Заинтересовался, ибо не должно такой буквы быть во французском языке  . Полез в языковой xml. Там эта же буква спокойненько так себе стояла, никого не трогая... К слову, сам xml-файл редактор AkelPad открыл с кодировкой Windows-1251. После замены строк и сохранения "французского" файла в той же кодировке в программе отобразилось нормальное русскоязычное меню. Оставалось только то же самое проделать с файлом для триальной версии и заменить "тарабароязычные" файлы.
Проделал. Заменил. Перезагрузился. Все заработало.

Непонятно только одно: и англоязычный и франкоязычный файлы редактор открывал в русской кодировке. В той же и сохранял, причем строка "<?xml version="1.0" encoding="UTF-8"?>" нигде не затрагивалась. Так почему английские файлы стали выдавать тарабарщину, а французские отобразили нормальную кириллицу? Загадка.
...И пускай фонари светят ярче далеких звезд -
Фонари все погаснут, а звезды будут светить.
(©В. Цой)