Warcraft 2 Жил, Живёт и будет жить!
об игре warcraft 2 Архив файлов Список ссылок Посетить Форум Почитать статейки F.A.Q. история warcraft 2 карты warcraft 2 турниры warcraft 2
Скачать игру бесплатно
скачать warcraft 2
WarCraft 2 COMBAT
(Warcraft II BNE 2.02+)
Актуальная версия: 4.6
(февраль 2020)
Совместимо с Windows XP/Vista/7/8/10

Боевой релиз, ~40 Мб
для игры по сети:
Английская версия
Русская версия

Полная версия, ~450 Мб
с музыкой и видео:
Полная английская версия
Полная русская версия
перевод от war2.ru на базе перевода от СПК

Другие версии и файлы
доступные для скачивания



Как подключиться и
играть в Warcraft 2 онлайн


Мы в социальных сетях:
Warcraft 2 вконтакте
Warcraft 2 в facebook

Для голосового общения:
Наша группа в Discord

Логин
Ник

Пароль


Потеряли пароль?

Нет своего аккаунта?
Зарегистрируйтесь!

Кто на сайте
 39: Гости
 0: Пользователи
 4102: Пользователи с регистрацией

Вы гость здесь.
+ регистрация

Последний посетитель:
arkanis: 1 День 4 ч. 23 м. назад
TigerHZ: 11 Дней 9 ч. 54 м. назад
Starwalker: 11 Дней 18 ч. 18 м. назад
AgainstTheGrain: 18 Дней 10 ч. 11 м. назад
Smergik: 62 Дней 22 ч. 22 м. назад
Rio: 93 Дней 7 ч. 40 м. назад
Oragorn: 125 Дней 16 ч. 41 м. назад
2001: 169 Дней 1 ч. 26 м. назад
sfinx: 244 Дней 1 ч. 53 м. назад
tolsty: 278 Дней 18 ч. 29 м. назад
Dark_Master: 300 Дней 21 ч. 48 м. назад
KagaN: 307 Дней 23 ч. 53 м. назад
Радибор: 329 Дней 14 ч. 14 м. назад
Bru-PA: 360 Дней 14 ч. 2 м. назад

Поиск

/  Список форумов
   /  WarCraft II
/  Кракозябры вместо русских букв в меню, nls-фикс bat-файл
Распечатать топик 
Кракозябры вместо русских букв в меню, nls-фикс bat-файл

il Кракозябры вместо русских букв в меню, nls-фикс bat-файл

Добрый Админ


Регистрация: 10.5.06
Сообщений: 2470
Откуда:


Захожу русской версией комбата на сервер, а там в некоторых диалогах bnet - вместо слов "победы", "поражения" и т.п. - кракозябры. Например, в профилях пользователей или прямо при входе.

Проблема старая, распространена много где, в том числе во всяких 1с v7 и прочем.
В общем, в старых до-UTF-ных приложениях.
Одно из популярных решений - залезть в реестр и выставить c_1251.nls для всех кодировок. Это решение больше не работает, как минимум с windows 7.
Зато работает подмена nls-файла в c:\windows\system32\c_1252.nls на c_1251.nls.
Конечно, после такой подмены надо перезагрузиться.

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

Решение конечно спорное: как минимум, это испортит такие же старые до-UTF-ные приложения на других языках, которые не русский и не английский, которые используют этот самый c_1252.nls.
Но русскоязычные пользователи, думаю, в большинстве своем, такую порчу переживут.
Наоборот, спасибо может быть скажут: многие другие старые русские приложения могут заработать.

В общем, выкладываю скрипт на всеобщее обозрение. Получилось неожиданно много кода, но аккуратно иначе не сделать. На windows 7 и 10 работают, на windows xp не проверял!
Заодно, может быть, кто-нибудь подскажет, может, можно как-то починить русские буквы в вар2 не подменяя nls глобально по всей системе?

Цитата:

@echo off

set SRC_SHORT_FILENAME=C_1251.NLS
set SRC_FILE="%windir%\System32\%SRC_SHORT_FILENAME%"
set DST_SHORT_FILENAME=C_1252.NLS
set DST_DIR=%windir%\System32
set DST_FILE="%DST_DIR%\%DST_SHORT_FILENAME%"
set DST_BACKUP_SHORT_FILENAME="%DST_SHORT_FILENAME%_backup"
set ACL_TMPFILE="%tmp%\%DST_SHORT_FILENAME%_acl_%random%"

if not exist %DST_FILE% goto NOTEXIST_ERR

"%windir%\System32\fc.exe" /b %SRC_FILE% %DST_FILE% >nul
if ERRORLEVEL 1 goto PERM
echo files already similar, nothing to do
goto END_NOTHING

:PERM
"%windir%\System32\icacls.exe" "%DST_FILE%" /save %ACL_TMPFILE%
if ERRORLEVEL 1 goto ACLSAVE_ERR
"%windir%\System32\takeown.exe" /F "%DST_FILE%"
if ERRORLEVEL 1 goto SETOWNER_ERR
"%windir%\System32\icacls.exe" "%DST_FILE%" /grant "%username%":(D)
if ERRORLEVEL 1 goto SETPERM_ERR
ren "%DST_FILE%" "%DST_BACKUP_SHORT_FILENAME%"
if ERRORLEVEL 1 goto REN_ERR
copy %SRC_FILE% %DST_FILE%
if ERRORLEVEL 1 goto COPY_ERR
"%windir%\System32\icacls.exe" "%DST_DIR%" /restore %ACL_TMPFILE%
if ERRORLEVEL 1 goto ACLRESTORE_ERR

echo done
if exist %ACL_TMPFILE% del %ACL_TMPFILE%
goto END_OK

:NOTEXIST_ERR
echo file not exist: %DST_FILE%
goto END_NOTHING
:ACLSAVE_ERR
echo error saving permissions: %DST_FILE% to file: %ACL_TMPFILE%
goto END_NOTHING
:SETOWNER_ERR
echo error changing owner to "%username%": %DST_FILE%
goto END_DELTMP
:SETPERM_ERR
echo error setting permissions: %DST_FILE%
goto END_DELTMP
:REN_ERR
echo error renaming file: %DST_FILE% to %DST_SHORT_FILENAME%
goto END_DELTMP
:COPY_ERR
echo error copying file: %SRC_FILE% to %DST_FILE%
rem if not exist %DST_FILE% ren "%DST_DIR%\DST_BACKUP_SHORT_FILENAME" "%DST_SHORT_FILENAME%"
goto END_NOTHING
:ACLRESTORE_ERR
echo error restoring permissions: %DST_FILE% from file: %ACL_TMPFILE%
goto END_OK

:END_DELTMP
if exist %ACL_TMPFILE% del %ACL_TMPFILE%
:END_NOTHING
exit /b 0
:END_OK
echo if you appeared here, that means you should reboot your computer to take effect
exit /b 1



Это все надо запускать как bat-файл, в режиме администратора, после успешной замены файла надо перезагрузиться.

Что делает скрипт:
просто заменить файл нельзя - нет прав, он системный.
Сначала меняем владельца на себя, потом, будучи владельцем, разрешаем себе его удалять-переименовывать.
Переименовываем, вместо него копируем c_1251.nls
на новый получившийся файл - восстанавливаем права "как было", запрещая себе его удалять, чтобы не ослаблять безопасность системы своими действиями.
Единственное, что не возвращаем как было - владельца файла, т.к. это невозможно штатными средствами, к сожалению.

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

Слеши форматирование грызет если его оформить как код, сделал код в виде цитаты. Ну и выложил файл сюда:
ftp://war2.ru/war2/utils/c_1252.nls.bat

[ Редактировано il в 28.1.19 12:54 ]

[ Редактировано il в 28.1.19 13:02 ]

[ Редактировано il в 28.1.19 13:04 ]

[ Редактировано il в 28.1.19 13:09 ]
» 28.1.19 13:46 Профайл Посетить веб-сайт

Ответов Автор Дата
   Re: Кракозябры вместо русских букв в меню, nls-фикс bat-файл il 30.1.19 03:47
      Re: Кракозябры вместо русских букв в меню, nls-фикс bat-файл Dar 30.1.19 10:16
         Re: Кракозябры вместо русских букв в меню, nls-фикс bat-файл il 30.1.19 12:02
            Re: Кракозябры вместо русских букв в меню, nls-фикс bat-файл Dar 30.1.19 12:53

Распечатать топик 

Поиск

Ключевые слова:    
[ Расширенный поиск ]

Права

Вы не можете начинать темы.
Вы не можете редактировать свои сообщения.
Вы не можете создавать опросы.
Вы не можете вкладывать файлы в сообщения.
Вы не можете отвечать на сообщения.
Вы не можете удалять свои сообщения.
Вы не можете голосовать.

Статус Battle.Net
Расширенный статус server.war2.ru
Загружается...
backup.war2.ru
Загружается...

Победители турниров
hurt's Sea Tournaments, 7/7: Final
ExtaseyVityOragorn
hurt's Sea Tournaments, 6/7: One Strait
OragornARMilitarExtasey
hurt's Sea Tournaments, 5/7: River fork
ExtaseyARMilitarDoooda
hurt's Sea Tournaments, 4/7: High seas combat BNE
VityARMilitarNone
hurt's Sea Tournaments, 3/7: Atols
ExtaseyARMilitarDoooda
hurt's Sea Tournaments, 2/7: Spiral
ARMilitarExtaseyhoma
hurt's Sea Tournaments, 1/7: Cross the streams
fuckluckARMilitarOragorn
Elite Final 2023
ExtaseyVityfuckluck
Qualifiers (no) 2023
OragornNemoDar
Complete Smurfdom
RagnerExtaseyNik5et

Пожертвования
Спасибо:
FX - $80 (домен)
Zelya - (турниры)
lesnik
Dar - (турниры)
Kagan - (турниры)
vova1 - (хостинг)
tolsty - (хостинг)
Oragorn - (хостинг)
2007 год:
Spbwar - $400
Jade -$100
MasterKsa - $60
Lisak -$52
Cocka - $50
Konstkl - $50
Ldir - $50
Gadzila - $20
Feature -$10

Последние статьи
 · Почему я проиграл? ..
 · О версиях игры и се..
 · 2 halling
 · Деньги на новый сер..
 · Моральные нормы в и..

- Генерация страницы: 0.69 секунд -