Страница 40 из 243

Добавлено: Ср дек 12, 2012 16:28
KopBuH
Flasher писал(а):MVV
А там всего 2 языка до Else..
а у меня в сборке только 2 языка и есть :)
Rus/Eng мне хватает.
хотите добавлять языки, добавляйте вручную:
(тут указаны стандартные названия файлов меню)

Код: Выделить всё

IniRead "Commander_LangIni" "%COMMANDER_PATH%\wincmd.ini" "Configuration" "LanguageIni" ""

If %COMMANDER_LANGINI% = wcmd_rus.lng Then
  SetEnv /EV COMMANDER_LANG "Rus"
ElseIf %COMMANDER_LANGINI% = wcmd_eng.lng Then
  SetEnv /EV COMMANDER_LANG "Eng"
ElseIf %COMMANDER_LANGINI% = wcmd_fra.lng Then
  SetEnv /EV COMMANDER_LANG "Fra"
ElseIf %COMMANDER_LANGINI% = wcmd_deu.lng Then
  SetEnv /EV COMMANDER_LANG "Deu"
Else
  SetEnv /EV COMMANDER_LANG "Default"
EndIf

Добавлено: Сб дек 15, 2012 15:36
Flasher
KopBuH писал(а):хотите добавлять языки, добавляйте вручную
Вот об этом технически неправильном подходе я и пишу.
А должно быть по идее так:

Код: Выделить всё

IniRead COMMANDER_LANGINI %COMMANDER_INI% Configuration LanguageIni False

If %COMMANDER_LANGINI% = wcmd_eng.lng OR %COMMANDER_LANGINI% = False Then
  SetEnv /EV COMMANDER_LANG Eng
ElseIf %COMMANDER_LANGINI% = wcmd_rus.lng Then
  SetEnv /EV COMMANDER_LANG Rus
EndIf
Avada писал(а):
Loopback писал(а):А для чего, если не секрет?
Я вижу смысл только в случае использования переменной в скриптах, где сообщения будут выводиться на соответствующем текущему языке.

Добавлено: Сб дек 15, 2012 20:48
Loopback
Flasher писал(а):А должно быть по идее так:
IniRead получает дефолтное значение только в случае отсутствия ключа файле. Если ключ есть, но пустой или с другим содержимым, неучтенным в условии, то переменная COMMANDER_LANG может остаться неопределенной. Поэтому последняя часть в условии KopBuH - правильная, только вместо Default можно поставить тот же Eng. Либо, надо перед условием установить начальное значение COMMANDER_LANG в нужное значение.
Flasher писал(а):Я вижу смысл только в случае использования переменной в скриптах, где сообщения будут выводиться на соответствующем текущему языке.
Народ, вы посмотрите вопрос-то. При чем тут язык? Я спрашивал про SID, который в том виде, как я показал, мне представляется малоприменимым.

Добавлено: Сб дек 15, 2012 20:57
Flasher
Loopback писал(а):IniRead получает дефолтное значение только в случае отсутствия ключа файле.
Я знаю, приведённый пример к этому и относится. Только что-то не работает твой плагин в этом отношении.
Loopback писал(а):Поэтому последняя часть в условии KopBuH - правильная
Неправильная. Почему - на предыдущей странице объяснял.
Loopback писал(а):При чем тут язык?
Avada привёл цитату после появления обсуждаемой задачи.

Добавлено: Сб дек 15, 2012 21:20
Loopback
Flasher писал(а): Только что-то не работает твой плагин в этом отношении.
Если не работает - так и скажи, что баг. Это я еще проверю.

Но в остальном, достаточно вместо Default использовать Eng - и условие станет вполне правильным.
Flasher писал(а):Avada привёл цитату после появления обсуждаемой задачи.
Ок. Насчет SID'a, как я понимаю, ответа вряд ли дождусь :)

Добавлено: Сб дек 15, 2012 21:36
Flasher
Loopback писал(а):и условие станет вполне правильным.
Объясняю. Допустим, кто-то захотел активировать отсутствующий в условиях язык. В этом случае переменная окружения будет иметь неправильное значение Eng. С моим примером переменная будет вообще отсутствовать, что явно лучше, чем иметь неправильное значение.
Loopback писал(а):Насчет SID'a, как я понимаю, ответа вряд ли дождусь
А я тут при чём? :) В мои задачи это не входило. Сам бы хотел знать, на кой оно..

Добавлено: Сб дек 15, 2012 23:10
Loopback
Flasher писал(а): С моим примером переменная будет вообще отсутствовать, что явно лучше, чем иметь неправильное значение.
И чем же это будет лучше?

Как раз обычная практика - использование языка по-умолчанию, если языковый файл не найден.

Лично я вообще не приемлю ситуации, когда переменная может существовать или нет. Если есть переменная, в зависимости от значения которой должны выполняться какие-то дальнейшие действия - она должна быть определена и у нее должно быть значение.

Хотя, конечно, можно и поверять, есть ли она или нет - это просто вопрос подхода.
Flasher писал(а): А я тут при чём?
Ни при чем, конечно, вопрос риторический.

Добавлено: Сб дек 15, 2012 23:20
Flasher
Loopback писал(а):Как раз обычная практика - использование языка по-умолчанию, если языковый файл не найден.
Я пишу про отсутствие переменной. FileExist тут даже не используется. К чему тут поиск файла?
Loopback писал(а):она должна быть определена и у нее должно быть значение
Даже если оно неправильное? И какой в этом практический смысл?
Loopback писал(а):Хотя, конечно, можно и поверять, есть ли она или нет - это просто вопрос подхода.
Увы, подходы дают разные результаты при описанных условиях.
Я бы, откровенно, вообще записывал в переменную значение ключа, а потом обрезал бы лишнее: [s]wcmd_[/s]deu[s].lng[/s].

Добавлено: Вс дек 16, 2012 10:36
MVV
Даже если оно неправильное? И какой в этом практический смысл?
Ну суть же понятна. Чем меньше значений может принимать переменная, тем лучше. Пустое или нет значение по умолчанию - это действительно вопрос подхода.
Я бы, откровенно, вообще записывал в переменную значение ключа, а потом обрезал бы лишнее: [s]wcmd_[/s]deu[s].lng[/s].
Непросто будет с ограниченным синтаксисом обработать все случаи вида WCMD_BLABLA_RUS.lng и т.п. Так что вариант с проверкой возможных (автор скрипта знает наверняка, какие у него там есть языки) имён куда проще.

Добавлено: Вс дек 16, 2012 11:17
KopBuH
Flasher писал(а):
KopBuH писал(а):хотите добавлять языки, добавляйте вручную
Вот об этом технически неправильном подходе я и пишу.
А должно быть по идее так:

Код: Выделить всё

IniRead COMMANDER_LANGINI %COMMANDER_INI% Configuration LanguageIni False

If %COMMANDER_LANGINI% = wcmd_eng.lng OR %COMMANDER_LANGINI% = False Then
  SetEnv /EV COMMANDER_LANG Eng
ElseIf %COMMANDER_LANGINI% = wcmd_rus.lng Then
  SetEnv /EV COMMANDER_LANG Rus
EndIf
понимаешь...откуда мне знать, как называется файл меню у тебя?.
может быть он у тебя по другому называется?. поэтому - хочешь добавить - добавь нужные языки ручками. я просто привел пример, как я сделал это для себя, и всё.
P.S. почему именно по умолчанию именно default? потому что я привязываю тулбары к конкретному языку. а у ТС по умолчанию стоит тулбар default.bar в корне ТС. поэтому я делаю переменную со значением default и скрипт грузит тулбар по умолчаню, в случае если langini пустой. язык по умолчанию - и тулбар по умолчанию.
У меня английский язык выбирается вручную, и в соответсвии с этим грузятся меню, тулбары, сообщения и т.д. если значение LangIni пустое, я не хочу чтобы грузились эти расширенные английские тулбары. поэтому у меня в случае отсутсвия конкретного значения - переменная назначается default. это значит, что в ТС установлен язык "по умолчанию" и грузить какие-то отдельные тулбары и меню - не надо.

Loopback: SID нужен для того, чтобы привязать парочку нестандартных фукнций ТС к контретному пользователю. SID будет использоватся для шифрования конкретных файлов, содержащих пароли и еще кое-что.

Добавлено: Вс дек 16, 2012 13:31
Flasher
MVV писал(а):Пустое или нет значение по умолчанию - это действительно вопрос подхода.
Какого подхода? Как "я" пойму, что "у меня" стоит не английский, если переменная показывает Eng?
MVV писал(а):Непросто будет с ограниченным синтаксисом обработать все случаи вида WCMD_BLABLA_RUS.lng и т.п.
Почему с ограниченным синтаксисом? Я же пишу, как бы я делал (уже в скрипте, соответственно) после возврата переменной среды.

KopBuH писал(а):понимаешь...откуда мне знать, как называется файл меню у тебя?
Синтаксис имён глаголит справка:
Справка ТС писал(а):Этот диалог позволяет выбрать внутреннюю команду из файла totalcmd.inc, а также определить новые команды, которые будут храниться либо в файле usercmd.ini, либо в специфическом для данного языка файле wcmd_lng.ini (например, wcmd_rus.ini для русского языка).
Другого знать и не надо. Имеем отсечённое значение, сверяем по массиву переменных. А вот как соотносится ответ с не понять зачем процитированным кодом я вообще не понял.
KopBuH писал(а):поэтому - хочешь добавить - добавь нужные языки ручками
Опять - 25. Такое ощущение, что читал мои ответы сквозь пальцы (если вообще читал)..
Если всё сводить к частному случаю с наличием 2-ух языков, то в таком случае ElseIf - вообще лишняя конструкция, тут и Else достаточно.


Кстати, Loopback, а ты можешь добавить возможность работы с условиями без переноса строк и EndIf, как в VB?

Добавлено: Вс дек 16, 2012 14:43
MVV
Какого подхода? Как "я" пойму, что "у меня" стоит не английский, если переменная показывает Eng?
Если ты в своем скрипте используешь английский, когда в тотале стоит не русский, то какая тебе разница, именно английский ли язык в действительности или нет? В данном случае eng - как раз значение по умолчанию (т.е., если язык не русский, считаем его английским, остальное не имеет значения).
Кстати, Loopback, а ты можешь добавить возможность работы с условиями без переноса строк и EndIf, как в VB?
Так ли это необходимо? Кто-то пишет такие простыни в скрипте Autorun, что эта мелочь сильно прояснит что-то?

Добавлено: Вс дек 16, 2012 15:05
Flasher
MVV писал(а):какая тебе разница, именно английский ли язык в действительности или нет?
Язык сообщения должен в идеале соответствовать текущему языку. Разница в знании/понимании отражаемого языка. Можно ставить указание на отсутствие языка перевода и менять это при необходимости.
А в случае предложенной обрезки можно сразу устанавливать язык меню, плагинов, программ, к примеру.
MVV писал(а):Кто-то пишет такие простыни в скрипте Autorun, что эта мелочь сильно прояснит что-то?
Я как раз не люблю простыни..

Добавлено: Вс дек 16, 2012 16:00
MVV
По-моему, все операции, которые не требуют быть сделанными непосредственно в пространстве тотала, должны выноситься во внешние скрипты и т.п., а в конфиге плагина должен остаться минимум (типа установки переменных окружения, т.к. извне этого не сделать).

Добавлено: Вс дек 16, 2012 16:15
Flasher
Так а тут больше кроме установки переменной ничего и не требуется. Главное баг исправить.