Форум программистов, компьютерный форум, киберфорум
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
49 / 31 / 2
Регистрация: 14.02.2013
Сообщений: 677

Как правильно проводить локализацию веб-приложения?

07.02.2014, 10:57. Показов 1590. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Посмотрел я видео Магданурова Гайдара о локализации приложений в ASP.NET. В видео приводился необходимый код, который я педантично переписал к себе. Код валиден, все красиво, форма создается, ошибок нет. Но и перевода страницы тоже нет.
Делал я все буквально шаг за шагом, точно по указке, дважды. И в коде все понятно, что, куда и с чем там взаимодействует, и должно работать (у него заработало как надо).
Создал я файл скрипта - тот, что с видео переписал, создал файл локализации командой "Создать локальный ресурс", прописал в значениях элементов выпадающего меню en-us, ru-ru, и событие создал на кнопке передавать значение выбранного элемента в переменную, которая в том скрипте используется для определения локализации. Но чего-то не хватает, видимо.
Вот код страницы:
Кликните здесь для просмотра всего текста
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" culture="auto" meta:resourcekey="PageResource1" uiculture="auto" %>
 
<!DOCTYPE html>
 
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <link href="StyleSheet.css" rel="stylesheet" type="text/css" />
    <title></title>
</head>
<body>
    <form id="form1" runat="server" >
        <div class="form"><asp:Label ID="Label1" runat="server" Font-Size="14pt" Text="Тестовая страница" CssClass="Header" meta:resourcekey="Label1Resource1"></asp:Label></div>
    <div class="form">        
 
        
 
        <p><asp:DropDownList ID="DropDownList1" runat="server" meta:resourcekey="DropDownList1Resource1">
            <asp:ListItem meta:resourcekey="ListItemResource1">Times</asp:ListItem>
            <asp:ListItem meta:resourcekey="ListItemResource2">Verdana</asp:ListItem>
            </asp:DropDownList>
        <asp:Button ID="Button1" runat="server" Text="Применить" OnClick="Button1_Click" CssClass="buttons" meta:resourcekey="Button1Resource1"/></p>
 
        <p><asp:DropDownList ID="DropDownList2" runat="server" meta:resourcekey="DropDownList2Resource1">
            <asp:ListItem Value="blk" meta:resourcekey="ListItemResource3">Черный</asp:ListItem>
            <asp:ListItem Value="red" meta:resourcekey="ListItemResource4">Красный</asp:ListItem>
            </asp:DropDownList>
        <asp:Button ID="Button2" runat="server" Text="Применить" OnClick="Button2_Click" CssClass="buttons" meta:resourcekey="Button2Resource1"/></p>
 
        <p><asp:DropDownList ID="DropDownList3" runat="server" meta:resourcekey="DropDownList3Resource1">
            <asp:ListItem Value="10" meta:resourcekey="ListItemResource5">10pt</asp:ListItem>
            <asp:ListItem Value="12" meta:resourcekey="ListItemResource6">12pt</asp:ListItem>
            <asp:ListItem Value="14" meta:resourcekey="ListItemResource7">14pt</asp:ListItem>
            </asp:DropDownList>
            <asp:Button ID="Button3" runat="server" Text="Применить" OnClick="Button3_Click" CssClass="buttons" meta:resourcekey="Button3Resource1"/></p>        
        
    </div>
    <div class="form">
        
 
            <asp:Button ID="Button4" runat="server" Text="Русский" CssClass="langB" meta:resourcekey="Button4Resource1" />
 
            <asp:Button ID="Button5" runat="server" Text="Английский" CssClass="langB" meta:resourcekey="Button5Resource1" />
 
            <p><asp:DropDownList ID="DropDownList4" runat="server" meta:resourcekey="DropDownList4Resource1">
                <asp:ListItem Value="ru-ru" meta:resourcekey="ListItemResource8">Русский</asp:ListItem>
                <asp:ListItem Value="en-us" meta:resourcekey="ListItemResource9">Английский</asp:ListItem>
 
            </asp:DropDownList>
                <asp:Button ID="Button6" runat="server" OnClick="Button6_Click" Text="Готово" meta:resourcekey="Button6Resource1" />
            </p>
        
    </div>
    </form>
</body>
</html>


Вот файл скрипт:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
 
 
public class LanguageModule : IHttpModule
{
    public void Dispose()
    {
        
    }
 
    public void Init(HttpApplication context)
    {
        context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);
    }
 
    void context_PreRequestHandlerExecute(object sender, EventArgs e)
    {
        Page page = HttpContext.Current.CurrentHandler as Page;
        if (page != null)
        {
            page.PreInit += new EventHandler(page_PreInit);
        }
    }
 
    void page_PreInit(object sender, EventArgs e)
    {
        Page page = sender as Page;
        if (page != null)
        {
            if (HttpContext.Current.Session["Culture"] != null)
            {
                System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo ((string) HttpContext.Current.Session ["Culture"]);
                System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo ((string) HttpContext.Current.Session ["Culture"]);
            }
            else 
            {
                System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo ("ru-ru");
                System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo ("ru-ru");
            }
        }
    }
}


Вот файл событий
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
[CSHARP]using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
 
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
 
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        string Val1 = DropDownList1.SelectedValue;
 
        if (Val1 == "Times")
        {
            Label1.Font.Name = "Times New Roman";
        }
        else
        {
            Label1.Font.Name = "Verdana";
        }
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        string Val2 = DropDownList2.SelectedValue;
 
        if (Val2 == "blk")
        {
            Label1.ForeColor = Color.Black;
        }
        else
        {
            Label1.ForeColor = Color.Red;
        }
    }
    protected void Button3_Click(object sender, EventArgs e)
    {
        string Val3 = DropDownList3.SelectedValue;
 
        if (Val3 == "10")
        {
            Label1.Font.Size = 10;
        }
        else if (Val3 == "12")
        {
            Label1.Font.Size = 12;
        }
        else
        {
            Label1.Font.Size = 14;
        }
    }
    protected void Button6_Click(object sender, EventArgs e)
    {
        Session["Culture"] = DropDownList4.SelectedValue;
        Response.Redirect(Request.Path);
    }
}
[/CSHARP]


Я подозреваю, что может быть просто создать файл-скрипт, и прописать в нем что-то мало, а требуется ещё и явно указать на этот файл, сделать привязку к нему?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.02.2014, 10:57
Ответы с готовыми решениями:

Как правильно строить архитектуру для веб ресурса, у которого есть приложения на телефоны/таблеты
Посоветуйте ресурс - как правильно строить архитектуру для веб ресурса, у которого есть приложения на телфоны/таблеты - больлше всего...

Возможен ли запуск MVC веб приложения без установки веб-серверов?
Есть программа, крутящаяся в виде службы Windows. Для неё есть клиент WinForm обмен с которым идёт через WCF. Была поставлена задача -...

Как правильно проводить отладку кода
Добрый день. Как отследить место ошибки в программе написанная на на Visual Studio 2015 на сервере где студия не установлена? В коде...

5
158 / 187 / 48
Регистрация: 25.11.2013
Сообщений: 978
07.02.2014, 16:11
Лучше сделай BasePage:Page
и там:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
protected override void InitializeCulture()
        {
            string culture = string.Empty;
            string requestUserLanguages = string.Empty;
 
            if (User.Identity.IsAuthenticated)
            {
                culture = (HttpContext.Current.Profile as ProfileCommon).System.Culture;
            }
            else
            {
                requestUserLanguages = Request.UserLanguages[0];
                if (!string.IsNullOrEmpty(requestUserLanguages))
                {
                    if (requestUserLanguages == "nb-NO")
                    {
                        culture = "nb-NO";
                    }
                    else
                    {
                        culture = "en-GB";
                    }
                }
                else
                {
                    culture = "en-GB";
                }
            }
            Thread.CurrentThread.CurrentCulture = new CultureInfo(culture);
            Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);
        }
0
 Аватар для sau
2773 / 2073 / 386
Регистрация: 22.07.2011
Сообщений: 7,820
07.02.2014, 17:00
Культура в конфиг.файле в соответствующей секции прописывается , файлы ресурсов в приложении оформляются по типу культуры ru-Ru, en-EN и т.п или по наименованию страницы , в целом больше никаких манипуляций делать не нужно.
Тут более чем подробно:
http://msdn.microsoft.com/ru-r... .100).aspx
0
49 / 31 / 2
Регистрация: 14.02.2013
Сообщений: 677
07.02.2014, 21:32  [ТС]
sau,
Вообще статьи MSDN не отличаются наглядностью, хотя и подробны. Без скринов очень многое приходится додумывать.

Вычитал вот такой способ:
HTML5
1
2
<asp:LinkButton ID="LanguageEnglish" Text="English" runat="server"></asp:LinkButton>
<asp:LinkButton ID="LanguageFrench" Text="Français" runat="server"></asp:LinkButton>
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
protected override void InitializeCulture()
{
    string language = Request.Form["__EventTarget"];
    string languageId = "";
 
    if (!string.IsNullOrEmpty(language))
    {
        if (language.EndsWith("French"))
            languageId = "fr-FR";
        else languageId = "en-US";
        Thread.CurrentThread.CurrentCulture = 
        CultureInfo.CreateSpecificCulture(languageId);
 
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(languageId);
    }
    base.InitializeCulture(); 
}
У меня теперь только один вопрос, этот C# код ставить в какой именно файл? Просто VS предлагает слишком много вариантов, когда жмешь добавить новый элемент, и все похожи расширением. Вот я и не уверен, что кидаю код, куда следует. Я выбрал вариант "Класс".
0
49 / 31 / 2
Регистрация: 14.02.2013
Сообщений: 677
07.02.2014, 21:39  [ТС]
И ещё, взгляните, пожалуйста на скрины, у меня видимых ошибок в именовании файлов ресурсов нет?
И в самом файле ресурсе для английской локализации элементы правильно именованы?
И файл с кодом C# на своем месте находится?
Миниатюры
Как правильно проводить локализацию веб-приложения?  
Изображения
 
0
49 / 31 / 2
Регистрация: 14.02.2013
Сообщений: 677
07.02.2014, 22:30  [ТС]
В общем, нашел я наглядную демонстрацию самого простого способа, здесь

Только воочию увидев все это, мне стало понятно, как это работает, и как это просто все.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.02.2014, 22:30
Помогаю со студенческими работами здесь

Как сделать локализацию?
Поясните, пожалуйста, пошагово какие файлы надо создать/изменить для полноценной локализации сайта. сайт я создал с нуля сейчас на...

Как узнать локализацию Windows?
Добрый день. Сабж. Есть ли в C# функция, определяющая то, какой язык используется у пользователя в качестве системного?

Как изменить локализацию Ворда?
Установил Ворд 2003. Локализация английская. Как изменить (доставить) локализацию Ворда?

Как сделать локализацию внутри класса/структуры?
Как сделать локализацию внутри класса/структуры?

Как писать веб-приложения?
Я никогда с сайтами не работал (в смысле программирования). Максимум, что я писал, это сервер/клиент, и то на Си с Winsock. Мне хотелось бы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru