PDA

View Full Version : چندزبانگی (multilanguage)



sm
جمعه 27 مهر 1386, 22:49 عصر
سلام
من میخوام سایتم رو چندزبانه طراحی کنم. اومدم و توی masterpage‌سایت یه Droplist گذاشتم که کاربر بتونه زبان موردنظرش رو انتخاب کنه.
اولا دوستان راهنمایی کنن که میتونم توی این قسمت قرار بدم یا نه؟
ثانیا، حالا که این کار رو کردم توی کدنویسی هم این کد رو توی ُSub InitializeCulture قرار دادم ولی مشکل اینه که Page رو نشون نمیده.


Master.Request.Form("cmbCulture")


ولی وقتی کد بالا رو با "Auto" جایگزین میکنم صفحه رو نشون میده ولی خوب چندزبانگی رو ندارم.

موفق باشید

sm
شنبه 28 مهر 1386, 00:22 صبح
یه راه حل براش پیدا کردم:
با استفاده از کوکی ها تونستم این کار رو انجام بدم. بدین ترتیب که این کد رو توی masterpage اضافه کردم:


Protected Sub cmbCulture_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmbCulture.SelectedIndexChanged
Dim cookie As HttpCookie = New HttpCookie("cmbCulture")
cookie.Value = cmbCulture.UniqueID
Response.SetCookie(cookie)

End Sub

بعد توی فرم Global.asax این کدها رو اضافه کردم :


Protected Sub Application_BeginRequest(ByVal sender As Object, ByVal e As System.EventArgs)
Dim culture As String
Dim cookie As HttpCookie = Request.Cookies("cmbCulture")
If IsNothing(cookie) Then
culture = "Auto"
culture = culture
Else
If IsNothing(cookie.Value) Then
culture = "Auto"
culture = culture
Else
culture = Request.Form(cookie.Value)

End If
End If

If (String.IsNullOrEmpty(culture)) Then
culture = "Auto"
culture = culture
End If
If (culture <> "Auto") Then

Dim ci As New System.Globalization.CultureInfo(culture)
System.Threading.Thread.CurrentThread.CurrentCultu re = ci
System.Threading.Thread.CurrentThread.CurrentUICul ture = ci
End If
End Sub

اگه دوستان راه حل دیگه ای دارند لطف کنن و اینجا بزارن.
آیا این روش مشکل امنیتی داره یا نه؟
اگه کاربر کوکی ها رو پاک کنه، مشکلی بوجود میاد؟

موفق باشید

mahdi_farhani
شنبه 28 مهر 1386, 19:44 عصر
من برای Multilanguge و MultiTheme یک کلاس نوشتم و کلیه صفحاتم از این کلاس ارث بری می کنن . نمیدونم روشی خوبی هست یا نه ...
این ساختار کلاسم در C# است .
در ضمن من از List استفاده کردم نه از Dropdown اینو دیگه


using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Globalization;
using System.Threading;
using dsMainTableAdapters;
/// <summary>
/// Summary description for clsBase
/// </summary>
public class clsBase : System.Web.UI.Page
{

public static Boolean page_direction=true;
public cDate cDateToday=new cDate();
public int User_Id = 0;
public clsBase()
{
//
// TODO: Add constructor logic here
//
Fill_String();
}
protected void Page_PreInit(object sender, EventArgs e)
{
load_Theme("0");
}
protected override void InitializeCulture()
{
load_Culture(Request.Form["ctl00$lstLanguage"]);
}


public void load_Culture(String lang)
{
//Dim lang As String = Request("ctl00$ddlLanguage")
String Lang_Culture="fa";
dsMain.Cms_Language_SelectDataTable dtLanguage=new dsMain.Cms_Language_SelectDataTable();
Cms_Language_SelectTableAdapter daLanguage=new Cms_Language_SelectTableAdapter();
dsMain.Cms_Language_SelectRow drLanguage;
if (! string.IsNullOrEmpty(lang))
{
dtLanguage = daLanguage.SelectDetails(int.Parse(lang));
if (dtLanguage.Rows.Count != 0)
{
drLanguage = (dsMain.Cms_Language_SelectRow)dtLanguage.Rows[0];
Lang_Culture = drLanguage.lng_Culture;
page_direction = drLanguage.lng_Direction;
}
}
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Lang_Culture.Tri m());
Thread.CurrentThread.CurrentUICulture = new CultureInfo(Lang_Culture.Trim());
base.InitializeCulture();
}
public void load_Theme(String Theme)
{
String Theme_Name = "Orginal";
String Theme_MasterPage = "mpMain.master";
if(String.IsNullOrEmpty(Theme))
{
Cms_Thems_SelectTableAdapter daTheme=new Cms_Thems_SelectTableAdapter();
dsMain.Cms_Thems_SelectDataTable dtTheme=new dsMain.Cms_Thems_SelectDataTable();
dsMain.Cms_Thems_SelectRow drTheme;
dtTheme = daTheme.SelectDetails(int.Parse(Theme));
if (dtTheme.Rows.Count!=0)
{
drTheme=(dsMain.Cms_Thems_SelectRow)dtTheme.Rows[0];
Theme_Name=drTheme.thm_Name;
Theme_MasterPage=drTheme.thm_MasterPage;
}
}
Page.Theme=Theme_Name;
Page.MasterPageFile="~\\MasterPages\\" + Theme_MasterPage;
}

}

sm
سه شنبه 01 آبان 1386, 09:18 صبح
من از روشی که در بالا توضیح دادم استفاده کردم ولی یه مشکل دارم اونم اینکه، وقتی از DropDown برای بار اول زبان رو انتخاب می کنم کار نمی کنه و حتما باید دوباره یه زبان دیگه رو انتخاب کنم تا کار کنه.
مثال :
الان فارسی هست و عربی رو انتخاب می کنم ولی کار نمی کنه اما همینکه فرضا زبان بعدی (انگلیسی) رو انتخاب می کنم کار می کنه.

موفق باشید