Задаем локализацию именем программы

в 9:00, , рубрики: .net, локализация, метки: , ,

При установке программ часто случается, что программа предлагает выбрать язык системы или выбрать язык с списка. Это не всегда удобно как кажется на первый взгляд, так как система может быть на китайском… ну или пользователь что то начудил и не может вернуть тот язык ОС, который ему нужен. Иногда предлагают скачать программу именно с той локализацией, которую нужно, но и это, увы не всегда реализовано хорошо или не всегда работает так как надо. И так, как же представить пользователю ту локализацию, которую пользователь выбрал при скачивании?

Итак, приступим.

Наилучший вариант в данном случае использовать данные с имени исполняемого файла как параметр локализации. Для примера можно взять строку «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


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js