PDA

View Full Version : وب سایت چند زبانه با .NET 2



majid_afra222
چهارشنبه 24 آبان 1385, 21:37 عصر
وب سایت چند زبانه با .NET 2
سلام
شاید برای شما هم پیش اومده باشه که بخواید یه سایت رو با چند زبان مختلف تولید کنید و ساختارهای اونرو (نوشته ها، تصاویر، چیدمان، عنوان صفحات و ... ) رو تغییر بدید.
می بخشید که زیاد توضیح نمی دم، چون وقت کمه و کارها زیاد. فقط تیکه های اصلی کار رو میگم.
به دو صورت می تونید یه سایت چند زبانه ایجاد کنید،
1- برای هر فایلتون یک یا بیشتر زبان داشته باشید
2- برای کل سایت یک یا بیشتر زبان داشته باشید.
تو اولی به ازای هر صفحه aspx زبانهای مربوط به اون صفحه رو دارید.
برای حالت دوم به ازای هر زبان یه فایل برای کل صفحات سایت خواهید داشت.

حالت اول :
یه صفحه نمونه با اجزای زیر می سازیم :


<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" />

برای اینکه زبانهای مربوط به این صفحه رو تعیین کنیم،
1- در حالت Design صفحه می ریم.
2- از منوی Tools گزینه Generate Local Resource رو انتخاب می کنید.
3- خود VS 2005 بصورت خودکار پوشه App_LocalResources رو میسازه و یه فایل resource همنام فایل انتخاب شده براتون میسازه که پسوندش resx خواهد بود. (نام صفحه ما Default.aspx هستش که فایل resource تولید شده برای اون Default.aspx.resx خواهد بود.)

این فایل شامل تمام اطلاعات آیتمهای موجود در صفحتون خواهد بود.


4- بعد از ایجاد فایل صفحه و آیتمهای اون بصورت اتوماتیک تغییر می کنن :


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default" Culture="auto" meta:resourcekey="PageResource2" UICulture="auto" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" meta:resourcekey="Label1Resource2" Text="Label"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server" meta:resourcekey="TextBox1Resource2"></asp:TextBox>
<asp:Button ID="Button1" runat="server" meta:resourcekey="Button1Resource2" Text="Button" /></div>
</form>
</body>
</html>



5- برای اینکه زبانهای دیگه رو به ایم صفحه اضافه کنید کافیه که فایل رو کپی کنید و نام اختصاری زبانهایی رو که میخواید، به پسوندش اضافه کنید (برای فارسی میشه Default.aspx.fa.resx یا Default.aspx.fa-IR.resx برای فرانسه میشه Default.aspx.fr.resx). برای کسب اطلاعات بیشتر در مورد اختصارهای نامگذاری به MSDN مراجعه کنید. (CultureInfo class, about CultureInfo class)

مثلا برای زبان فارسی :


تغییر زبان :
برای تغییر زبان صفحه دو راه حل وجود داره که یکیش تغییر نحوه نمایش اطلاعات تو خود IE هستش که باهاش کاری نداریم، و انرو از طریق کد نویسی می گم.
یه DropDownList1 به این صورت به صفحه اضافه می کنیم :



<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true">
<asp:ListItem Value="en-US">English</asp:ListItem>
<asp:ListItem Value="fa-IR">فارسی</asp:ListItem>
</asp:DropDownList>


خوب حالا باید با انتخاب زبان بتونیم اطلاعات صفحه رو عوض کنیم.
برای اینکاه باید متد InitializeCulture رو تو صفحه پیاده سازی کنیم :


using System.Threading;
using System.Globalization;

protected override void InitializeCulture()
{
string strLang = Request["DropDownList1"];
if ((strLang != null) && (strLang != ""))
{
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(strLang);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(strLang);
}
}



خوب فقط کافیه صفحه رو اجرا کنید.
مثال رو هم پیوست کردم.

ادامه بحث و نحوه استفاده و کنترل زبان تو master page رو هم انشاا... فردا می گم.

امیدوارم برای دوستان مفید باشه.

kiosksoft
سه شنبه 15 مرداد 1387, 14:17 عصر
all of best

merlin_vista
سه شنبه 15 مرداد 1387, 14:42 عصر
فقط چند تا سوال :
1- مثلاً يك سايت ممكنه 50 تا صفحه داشته باشه . ما اگه خواستيم براي يك سايت با 50 صفحه امكان دو زبانه بگزاريم بايد براي هر 50 صفحه يكي يكي اين كار را انجام بدهيم ؟

2 - چگونه مثلاً تعيين كنيم كه انگليسي پيش فرض باشه يا فارسي ؟

3 - نام اختصاری زبانهایی حتماً بايد اين چيزهاي كه ميگي باشه ... منظورم اينه كه CultureInfo از كجا ميفهمه كه فايل فارسي مثلاً Default.aspx.fa-IR هست /

4 - چگونه چپ چين و راست چين را پياده سازي كنيم .

فهرست كامل نام هاي اختصاري زبان ها دنيا (http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo%28VS.80%29.aspx)


با تشكر ! ! . .

afsharm
سه شنبه 15 مرداد 1387, 15:26 عصر
سورس‌های ما در اینجا همگی دو زبانه هستند و از آنجا که تعداد صفحات خیلی زیاد هستند حجم ریسورس‌های آنها هم خیلی خیلی زیاد شده. مشکل ما هم این است که با هر بار publish کل سورس وقتی زیادی از ما تلف می‌شه به خاطر بیلد شدن هر کدوم از اون فولدرهای ناقابل app_localResources. در حالی که بیلد کل کتابخانه (فقط dll) و بیلد خود پروژه وب کمتر از 15 دقیقه طول می‌کشه بیلد همان چند فولدر ناقابل حدود 50 دقیقه طول می‌کشه. و این همون مصیبته که دوست دارم حل بشه. ضمنا جایی خونده بودم که می‌شه این ریسورس‌ها رو به صورت بیلد شده به پروژه وب اضافه کرد.

mostafa_sgh
سه شنبه 15 مرداد 1387, 16:07 عصر
با تشکر فراوان از مطلب مفیدتون

در رابطه با زبان پیش فرض باید بگم که ، شما باید این Section رو به Web.config اضافه کنید



<globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8" culture="fa-ir" uiCulture="fa-ir"/>


ودر رابطه با Layout صفحه شما میتونید یه فیلد به نام Layout به فایل Resource اضافه کنید و اونو برابرا rtl ( برای فارسی ) یا ltr (برای انگلیسی) قرار بدید.

و در صفحاتون هم تو تگ Body این خصیصه رو اضافه کنید :



<Body dir="<%$ Resources:Resource, Layout %>">

merlin_vista
سه شنبه 15 مرداد 1387, 18:12 عصر
ممنون :
من تو فايل resx يه فيلد با نام Layout ساختم و مقدار RTL را براي فارسي و مقدار LTR را براي انگليسي دادم ولي تو اجرا ، كار نميده .


<body dir="<% Resources:Resource,Layout $ %>" runat="server" >

nazaninam
پنج شنبه 29 اسفند 1387, 12:02 عصر
یک مقاله کامل در مورد سایت های چند زبانه :
http://how2learnasp.net/article.aspx?code=7d5730a4-24e9-413c-874c-191054f445cb

مهدی کرامتی
پنج شنبه 29 اسفند 1387, 14:45 عصر
کد زیر را در متد Page_Load صفحه تان قرار داده و نتیجه را تست کرده و اطلاع دهید:

Page.DataBind();

ممنون :
من تو فايل resx يه فيلد با نام Layout ساختم و مقدار RTL را براي فارسي و مقدار LTR را براي انگليسي دادم ولي تو اجرا ، كار نميده .


<body dir="<% Resources:Resource,Layout $ %>" runat="server" >

Alirezanet
سه شنبه 16 شهریور 1389, 00:56 صبح
سلام ممنون از مقاله مفیدتون.
قرار بود در مورد masterpage هم توضیح بدین !؟
ما همچنان در انتظاریم !!!