При установке программ часто случается, что программа предлагает выбрать язык системы или выбрать язык с списка. Это не всегда удобно как кажется на первый взгляд, так как система может быть на китайском… ну или пользователь что то начудил и не может вернуть тот язык ОС, который ему нужен. Иногда предлагают скачать программу именно с той локализацией, которую нужно, но и это, увы не всегда реализовано хорошо или не всегда работает так как надо. И так, как же представить пользователю ту локализацию, которую пользователь выбрал при скачивании?
Итак, приступим.
Наилучший вариант в данном случае использовать данные с имени исполняемого файла как параметр локализации. Для примера можно взять строку «lang_uk_UA» или «L10n_uk», тогда название программы будет «AppName_lang_uk_UA» и «AppName_L10n_uk» соответственно.
Рассмотрим пошагово код.
Миссия #1. Получить путь к исполняемому файлу.
Для получения используем:
string file_path = Application.ExecutablePath;
или же
string file_path = System.Reflection.Assembly.GetExecutingAssembly().Location;
не принципиально, но если у вас консольная программа и вы нууу просто должны использовать первый пример, то не забудьте добавить ссылку на System.Windows.Forms.
Полный путь мы получили, теперь надо получить имя исполняемого файла.
Миссия #2. Представься!
Вырезаем имя файла с пути:
string file_name = file_path.Substring(file_path.LastIndexOf("\")+1);
Получаем полное имя исполняемого файла включая формат, например AppName_lang_uk_UA.exe. Можно воспользоваться регулярками, тут уже на ваш вкус.
Миссия #3. Do you speak english? Sprechen sie deutsch? Parler francais?
С имени исполняемого файла получаем предпочитаемую локализацию:
или режем пилой:
int start = file_name.IndexOf("lang_")+5;
int length = file_name.Length-4;
string local = file_name.Substring(start,length-start);
или добудем её регуляркой:
Match match = Regex.Match(file_name, "lang_(.*).exe");
string locale = match.Groups[1].ToString();
Программа представилась, мы ей сообщили на каком языке хотим общаться. При запуске автоматом представим локализацию программы на языке который пользователь сам и выбрал.
Миссия #4. «Отдай мне пирожки».
Всё это мы рассмотрели как готовую программу на машине, но её то надо как то и отдать пользователю. Для этого возьмем пример:
<?php
if($_REQUEST['locale']){
header("Content-type: application/exe");
header("Content-Disposition: attachment; filename="app_lang_".$_REQUEST['locale'].".exe"");
readfile("app.exe");
}else{
echo '<form><select name=locale>
<option value="uk_UA">uk_UA</option>
<option value="ru_RU">ru_RU</option>
</select>
<input type=submit value="Download application">
</form>';
}
В данном примере всё элементарно: пользователь выбирает нужную локализацию, скачивает и всё. Никаких лишних движений.
Заключение.
В такой схеме есть и плюс:
+ отдаем пользователю именно то, что ему надо на ходу
и минус:
— все завист отпользователя.Переименует или сохранит под другим именем и прощай то что выбрал.
Спасибо за внимание, критика приветствуется.
Автор: mariohimik