MSI Lab - Форум по русификации

Основные форумы => RusMe - РусМи! => Тема начата: Archiv@rius_31 от 05 Июля 2009, 21:12:55

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

xml-файл и снимок части окна программы в прикрепленном архиве.
Название: FarStone VirtualDrive Pro 11.7
Отправлено: shkiper от 06 Июля 2009, 14:42:48
Сегодня примерно час убил чтоб разобраться - ни в какую не поддается. Я думаю дело в каком-нибудь веб-компоненте, отвечающем за отрисовку меню, в котором нет поддержки кирилицы в принципе. Плюс там очень много скриптов, может в них надо где-то принудительно эту кодировку вписать? Я с HTML дружу, и в них вроде все в порядке, а вот со скриптами не очень.
Название: FarStone VirtualDrive Pro 11.7
Отправлено: Archiv@rius_31 от 07 Июля 2009, 13:57:32
Вчера все-таки решил, поставил себе на вторую винду глючную 10 версию (чем, правда, изрядно искалечил систему) и русифицировал русификатором от Dr.Ross с бэкапом файлов. Среди русифицированных библиотек там был один xml-файл, и в программе все строки из него отображались корректно. Файл был русифицирован и сохранен в формате utf-8. Попробовал сделать также на 11 версии - не прокатило. Может поддержка русской кодировки отсутствует в самом exe-шнике(ах)? Как это узнать? И если да, то как пропатчить?

Со скриптами я и сам не дружу, хотя открывал их вчера - вроде бы текстов, напоминающих названия кодировок, не нашел.
А вообще, как эту кодировку там поставить, если можно это сделать?
Название: FarStone VirtualDrive Pro 11.7
Отправлено: Solenij от 07 Июля 2009, 14:38:58
Цитата: Archiv@rius_31
Может поддержка русской кодировки отсутствует в самом exe-шнике(ах)? Как это узнать? И если да, то как пропатчить?
Скорее всего не в этом причина. Я так понял, что остальное всё нормально переводится и поддерживается кроме этого меню?! Значит экзешник поддерживает кириллицу, а иначе бы всё остальное тоже было бы иероглифами. Скорее всего где-то в скриптах надо копать.
Название: FarStone VirtualDrive Pro 11.7
Отправлено: Archiv@rius_31 от 07 Июля 2009, 22:36:30
Да, все перевелось нормально. Более того, начал переводить аналогичный строчный xml в другой папке - все отображается корректно.
В скриптах не знаю, где копать, где нужный скрипт лежит, хотя подозреваю, что лежит он в папке в папке mainui\js
На всякий случай прикрепляю архив со скриптами.
Поиском найти в файлах ссылку на требуемый reg0409.xml не получилось - вероятно, зашито в программном коде. Может быть, только если с помощью каких-нибудь утилит поискать... Но имеет ли смысл?  
Название: FarStone VirtualDrive Pro 11.7
Отправлено: Godless от 08 Июля 2009, 09:40:01
Archiv@rius_31
Попробуй этот командник. Он заменяет кодовые страницы в реестре, меняет шрифты на способные к кириллице и сразу же перезагружает систему
Название: FarStone VirtualDrive Pro 11.7
Отправлено: Archiv@rius_31 от 08 Июля 2009, 19:01:08
Цитата: Godless
Попробуй этот командник. Он заменяет кодовые страницы в реестре, меняет шрифты на способные к кириллице и сразу же перезагружает систему
С кодировкой в системе и так у меня вроде бы все в порядке. Но все равно запустил. Не помогло. По прежнему тарабарщина.  
Название: FarStone VirtualDrive Pro 11.7
Отправлено: Archiv@rius_31 от 09 Июля 2009, 08:06:37
А может ли быть проблема в файле webmenu.ocx? Еще при ресурсном переводе заметил в нем значки, которые в меню вырисовываются. И рисуночек самого меню есть там, правда в англицком варианте. Зачем - неизвестно.
Название: FarStone VirtualDrive Pro 11.7
Отправлено: shkiper от 09 Июля 2009, 08:23:33
Я на этот файл сразу внимание обратил, из-за имени. Эксперименты с ним результата не дали, и вообще, как я понял он вроде отвечает за меню в трее.
Название: FarStone VirtualDrive Pro 11.7
Отправлено: Archiv@rius_31 от 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//////////////////////////////////////

Вопрос: куда дописывать команды, задающие кодировку?
Название: FarStone VirtualDrive Pro 11.7
Отправлено: VIPer от 12 Июля 2009, 01:31:54
Для вашего случая статья:
http://www.javaportal.ru/java/articles/rus...s/ruschars.html (http://www.javaportal.ru/java/articles/ruschars/ruschars.html)
Название: FarStone VirtualDrive Pro 11.7
Отправлено: Archiv@rius_31 от 15 Июля 2009, 11:06:26
Статья не помогла. Искал в файлах поисковиком указанные команды - не нашел. Может быть, существуют какие-нибудь вариации?
Можно было бы, конечно, попытаться принудительно перекодировать - только не знаю, куда и в какое место вставлять нужные команды - в яваскриптах я чайник. Ни в одном скрипте не нашел прямую ссылку на требуемый xml-файл. Нет их и в main.htm.
Может быть, только если попробовать поставить, например, немецкую версию со знаками диакритики, может быть в тех скриптах строчка перекодировки будет?

Не хотелось бы, оставлять меню непереведеным или nuCATb AHI'/|uuCKuMu bYKBAMu.
Как быть? помогите плз!
Название: FarStone VirtualDrive Pro 11.7
Отправлено: Archiv@rius_31 от 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-->
- пока не получилось.
Может быть есть еще какие-нибудь варианты?
Название: FarStone VirtualDrive Pro 11.7
Отправлено: NedMaker от 16 Июля 2009, 00:23:28
Тема перемещена в новый форум, специально созданный для решения подобных проблем.
Название: FarStone VirtualDrive Pro 11.7
Отправлено: Archiv@rius_31 от 16 Июля 2009, 22:22:54
Слава Богу!!! Перевел!!!  
Русифицировать получилось не совсем обычным, но в то же время довольно простым (хотя мне до сих пор не совсем понятным из-за поведения...) способом. Обо всем по порядку.
Одно хочу сказать: скрипты тут были ни при чем. Как я и предполагал насчет версии с другим языком, помогла французская версия. После ее установки на свежую систему обнаружил в одном из пунктов меню букву "й". Заинтересовался, ибо не должно такой буквы быть во французском языке  . Полез в языковой xml. Там эта же буква спокойненько так себе стояла, никого не трогая... К слову, сам xml-файл редактор AkelPad открыл с кодировкой Windows-1251. После замены строк и сохранения "французского" файла в той же кодировке в программе отобразилось нормальное русскоязычное меню. Оставалось только то же самое проделать с файлом для триальной версии и заменить "тарабароязычные" файлы.
Проделал. Заменил. Перезагрузился. Все заработало.

Непонятно только одно: и англоязычный и франкоязычный файлы редактор открывал в русской кодировке. В той же и сохранял, причем строка "<?xml version="1.0" encoding="UTF-8"?>" нигде не затрагивалась. Так почему английские файлы стали выдавать тарабарщину, а французские отобразили нормальную кириллицу? Загадка.
Название: FarStone VirtualDrive Pro 11.7
Отправлено: VIPer от 17 Июля 2009, 13:05:56
Вот нашел интересный сабж по этому поводу: http://www.opennet.ru/openforum/vsluhforumID9/5979.html (http://www.opennet.ru/openforum/vsluhforumID9/5979.html).
Название: FarStone VirtualDrive Pro 11.7
Отправлено: Archiv@rius_31 от 20 Июля 2009, 08:37:29
Последний вопрос касаемо этой программы (топик вроде бы ей посвящен, поэтому создавать новый не хочу) - русифицировал все, но в главном окне названия каталогов Cabinet, Music, Movies, Games и Software остались на английском языке. Ни в одном файле таких строк Тоталом не нашел. Radialix отображает в проекте жестко-закодированные строки, но слов этих там не находит. В ресурсной части все в порядке - переведено. В принципе, можно оставить так как есть, только в некоторых сообщениях упоминание этих каталогов идет на русском языке. Посоветуйте, как можно русифицировать эти строки и откуда их выдернуть?

(2administrators: если можно, переименуйте, пожалуйста, тему в FarStone VirtualDrive Pro v11.7)
Название: FarStone VirtualDrive Pro 11.7
Отправлено: shkiper от 20 Июля 2009, 09:16:43
В жестко-закодированных мне довольно часто встречались разрезанные фразы и слова. Например, в одной строчке "Soft", а в другой "ware". Может это тот самый случай. Второй вариант - они где-то в виде картинок лежат. И третий - как в ACDSee - у нее список каталогов после установки на русский не переводится. Поэтому поставь программу на чистой системе и замени файлы на русские до запуска. Если все будет на русском - это третий вариант. Если же нет - один из первых двух или вообще неизвестный мне
Название: FarStone VirtualDrive Pro 11.7
Отправлено: VIPer от 20 Июля 2009, 12:05:53
Скорее всего, информация о них заложена в реестре или в файлах конфигурации этой программы в каталоге Roaming. Сто пудова, поскольку эти папки можно переименовывать.

На успешный поиск вас могут вывести эти файлы:

[WIN9X]
fcdabus.inf=%Inf%\fcdabus.inf
FCDABUS.vxd=%System%\FCDABUS.vxd
fvdscsi.inf=%Inf%\fvdscsi.inf
fvdscsi.mpd=%Drivers%\fvdscsi.mpd
VDI08X.dat=%System%\VDI08X.dat
VPlay801.exe=%Windows%\VPlay801.exe
Driver.ico=%Windows%\Driver.ico

[WINNT]
fvdscsi.inf=%Inf%\fvdscsi.inf
fvdscsi.sys=%Drivers%\fvdscsi.sys
VDI08X.dat=%System%\VDI08X.dat
VPlay801.exe=%Windows%\VPlay801.exe
Driver.ico=%Windows%\Driver.ico

[WIN2KXP]
Fcdabus.inf=%Inf%\Fcdabus.inf
fcdabus.sys=%Drivers%\fcdabus.sys
Fvdscsi.inf=%Inf%\Fvdscsi.inf
fvxscsi.sys=%Drivers%\fvxscsi.sys
VDI08X.dat=%System%\VDI08X.dat
Driver.ico=%Windows%\Driver.ico

fcdabus.cat=%Inf%\fcdabus.cat
Fvdscsi.cat=%Inf%\Fvdscsi.cat
Название: FarStone VirtualDrive Pro 11.7
Отправлено: Archiv@rius_31 от 23 Июля 2009, 08:39:30
shkiper, VIPer, спасибо. Это был третий случай. Нашел в папке «%USERPROFILE%\Application Data\FarStone\VirtualDrive\Data Files\ два файла: VCDList.dat и VCDList.dat.bak, в которых WinHEX-ом обнаружил англоязычные строки. Правда, замена их русскими в VCDList.dat не помогла, однако после удаления этих двух файлов и перезапуска программы названия русифицировались. Правда, содержимое Каталога оказалось стертым, но, думаю, даже если бы я перекопал все два файла и результат получился бы нормальным, на машине конечного пользователя пропатчить эти файлы вряд ли удалось бы - ибо Каталоги у каждого свои, и CRC файлов тоже различны. Поэтому просто указал в мануале к русификатору о необходимости (если надо) удаления этих файлов.

Русификатор собрал и выложил. Тестируйте!
_____________
Всем огромное спасибо!
Название: FarStone VirtualDrive Pro 11.7
Отправлено: ZeroChaos от 23 Июля 2009, 09:17:23
Опубликовано:
Русификатор VirtualDrive 11.7 pro от Archiv@rius_31
http://msilab.net/rus.5353 (http://msilab.net/rus.5353)
Название: FarStone VirtualDrive Pro 11.7
Отправлено: dr.Ross от 03 Августа 2009, 09:56:56
Archiv@rius_31,

Проблемма решена, но вот нашёл второе простое решение.
Решение проблеммы с кодировкой. При анализе файла reg0409.xml   и   reg0407.xml  в строке <parameter indexno="13" ResFlag="0"></parameter>  последнего указан параметр  ResFlag="0",  а у первого указан параметр ResFlag="950". При замене  "950"  на  "0"  русские буквы отображаются нормально.
Да и есчо. Сохранить файл нужно в кодировке "Windows-1251". И открывать также.