آرشیو برای ژوئن, 2009

همه زبانهای دنیا به همه زبانهای دنیا


سایت گوگل در آدرس



http://www.google.com/preferences
اجازه تنظیم سایت به
زبانهای مختلف را می دهد. تعداد زبانهای مختلف در این سایت 124  زبان می باشد. با انتخاب هر زبان
مشخصات صفحه به زبان انتخاب شده تغییر می کند.


هنگامی که از کومبوی زبانها زبان مورد نظر انتخاب می شود آدرس به صورت
 
http://www.google.com/preferences?hl={Iso}
تغیر می باد. برای مثال برای زبان انگلیسی به صورت


http://www.google.com/preferences?hl=en
و
برای فارسی

http://www.google.com/preferences?hl=fa
و
یا آذربایجانی  به صورت


http://www.google.com/preferences?hl=az
در
می آید.


حال چگونه می توان از این موضوع برای استخراج اطلاعات زبانهای به زبانهای مختلف
استفاده کرد. در فایرفاکس با استفاده از فایر باگ می توان به راحتی یک کپی از کومبو
(
Select)
برداشت و با یک زبان برنامه نویسی مانند روبی یا
php

 و یا
.netی
اطلاعات را به یک دیتا بیس انتقال داد.این روش مستلزم این می باشد که برای 124 زبان
این مورد را تکرار کنیم. (که برای آدم کم حوصله ای مثل من کمی خسته کننده است

J). به همین خاطر از یک روش دیگری استفاده کردم
که اینجا اونو شرح می دم:


اول به همون روشی که گفتم یک کپی از کومبو لیست زبانها می گیریم و در یک پروژه
Asp.net کپی
می کنیم.


در
صفحه
.aspx

 بر روی شی
select

 کلیک راست کرده و تگ

<select name="hl">
را به صورت

<select id="hl"
runat="server">
تغییر دهید.


کلید زیر را به اضافه کنید:

<asp:Button ID="btnSave" runat="server" Text="Save" />


کومبوی
"hl"

حاوی تمامی زبانهای موجود در گوگل می باشد، و هر یک آیتمهای آن به صورت زیر می
باشد:

<option value="ISO">Name
</option>


ISO
کد اختصاری
زبان و
Name نام
اصلی آن زبان به زبانی است که در گوگل انتخاب شده است.


حال 
onClick آن
را به صورت زیر بنویسد:

protected
void btnSave_Click(object
sender, EventArgs e)

{

foreach (ListItem item
in hl.Items)

      
{

           
.


     .   


     .

      
}

}


دستور
foreach

 آیتم های عنصر
select

 را یک به یک خوانده و اطلاعات مربوط به آن
زبان را استخراج می کند.

دو
namespace

 زیر را به صفحه اضافه می کنیم:

using
System.Net;

using System.IO;

با
استفاده از دستورات زیر اطلاعات صفحه تنظیمات گوگل را می خوانیم:

foreach
(ListItem item in
hl.Items)

{

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://www.google.com/preferences?hl="+item.Value);


request.Method = WebRequestMethods.Http.Get;

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

StreamReader reader = new
StreamReader(response.GetResponseStream());

string
result = reader.ReadToEnd();

response.Close();

.

.

.

}


اطلاعات صفحه

"http://www.google.com/preferences?hl="+item.Value
با استفاده از
HttpWebRequest
خوانده شده و در
result
ذخیره می شود. بایستی ابتدا و انتهای کومبوی مورد نظر را در


result
پیدا کنیم:

foreach
(ListItem item in
hl.Items)

{

      
.

.

.

 

      
if (result.IndexOf("Error:") < 0)  

      
{

         
int start = 0, end = 0;

         
string startTag =
"<select name=hl>";

         
string endTag =
"</select>";

         
start = result.IndexOf(startTag,
StringComparison
.CurrentCultureIgnoreCase);

 

     
end = result.IndexOf(endTag, start,
StringComparison
.CurrentCultureIgnoreCase);

           
string str = result.Substring(start +
startTag.Length, end – (start + startTag.Length));

                          

             
.

             
.

             
.

             

           
}

    }


مرحله آخر هم استخراج این اطلاعات و ذخیره آنها در یک بانک اطلاعاتی هستش.کد نهائی
به صورت زیر خواهد بود که با
Linq
نوشته شده:


       
protected void
btnSave_Click(object sender,
EventArgs e)

       
{

           
CountryDBDataContext db =
new
CountryDBDataContext
();

 

           
foreach (ListItem
item in hl.Items)

           
{

               
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://www.google.com/preferences?hl=" +
item.Value);

               
request.Method = WebRequestMethods.Http.Get;

               
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

               
StreamReader reader =
new StreamReader(response.GetResponseStream());

               
string result = reader.ReadToEnd();

               
response.Close();

 

               
if (result.IndexOf("Error:") < 0)

               
{

                   
int start = 0, end = 0;

     
              
string startTag =
"<select name=hl>";

                   
string endTag =
"</select>";

                   
start = result.IndexOf(startTag,
StringComparison
.CurrentCultureIgnoreCase);

                   
end = result.IndexOf(endTag, start,
StringComparison
.CurrentCultureIgnoreCase);

                   
string str = result.Substring(start +
startTag.Length, end – (start + startTag.Length));

 

                   
str = str.Replace("&nbsp;",
"\"\"");

                   
str = str.Replace("&yacute;",
"ý");

                   
str = str.Replace("&lt;",
"<");

                   
str = str.Replace("ĝ",
"ĝ");

                   
str = str.Replace("ħ",
"ħ");

                   
str = str.Replace("ϋ",
"ϋ");

                   
str = str.Replace("г",
"г");

 

                   
str = str.Replace(" selected",
"");

 

                   
for (int
i = 0; i < str.Length; )

                   
{

                       
string code = string.Empty;

                       
string name = string.Empty;

 

                       
i += "<option value=".Length;

 

                       
//code = select.Substring(i, select.IndexOf(">", i) – i);

 

                       
while (str.Substring(i, 1) != ">")

                       
{

                   
        
code += str.Substring(i, 1);

                           
i++;

                       
}

                       
i++;

 

                       
if (str.IndexOf("<option value=", i) >
0)

                           
name = str.Substring(i, str.IndexOf("<option
value="
, i) – i);

                       
else

                           
name = str.Substring(i, str.Length – i);

                       
i += name.Length;

                      

                       
Language l = new
Language();

           
            
l.inCode = item.Value;

                       
l.code = code;

                       
l.name = name;

 

                       
db.Languages.InsertOnSubmit(l);

                       
db.SubmitChanges();

 

                   
}

               
}

 

           
}

       
}


 

یک نظر بنویسید