精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C#實(shí)現(xiàn)多語言界面程序的方法介紹

開發(fā) 后端
本文以一個(gè)C# winform項(xiàng)目為例,介紹了C#實(shí)現(xiàn)多語言界面程序的方法,希望對(duì)大家有所幫助。

 一直想做一個(gè)多語言的程序,研究了一下.net的本地化方法,覺得做起來比較麻煩,而且不能快速切換,就自己琢磨著寫一個(gè)。

以我做的一個(gè)C# winform 項(xiàng)目為例。

在建立C#實(shí)現(xiàn)多語言界面程序之前,首先設(shè)計(jì)多語言文件,這里我用XML來保存,基本結(jié)構(gòu)如下。 

  1. < ?xml version = "1.0" encoding = "GB2312"?> 
  2.  < AirControl language="簡體中文"> 
  3.      < Menu> 
  4.          < Project> 
  5.              < Item id="0" key="MenuProject" value="項(xiàng)目(&P)" /> 
  6.              < Item id="1" key="MenuProjectItem1" value="新建(&N)" /> 
  7.              < Item id="2" key="MenuProjectItem2" value="打開(&O)" /> 
  8.              < Item id="3" key="MenuProjectItem3" value="保存(&S)" /> 
  9.              < Item id="5" key="MenuProjectItem5" value="退出(&X)" /> 
  10.         < /Project> 
  11.         < Manage> 
  12.             < Item id="0" key="MenuManage" value="管理(&M)" /> 
  13.             < Item id="1" key="MenuManageItem1" value="登錄(&I)" /> 
  14.             < Item id="2" key="MenuManageItem2" value="注銷(&O)" /> 
  15.             < Item id="3" key="MenuManageItem3" value="修改密碼(&C)" /> 
  16.             < Item id="4" key="MenuManageItem4" value="用戶管理(&U)" /> 
  17.         < /Manage> 
  18.         < Help> 
  19.             < Item id="0" key="MenuHelp" value="幫助(&H)" /> 
  20.             < Item id="1" key="MenuHelpItem1" value="幫助內(nèi)容(&H)" /> 
  21.             < Item id="2" key="MenuHelpItem2" value="關(guān)于(&A)" /> 
  22.         < /Help> 
  23.     < /Menu> 
  24.     < Toolbar> 
  25.         < Statusbar> 
  26.             < Item id="1" key="StatusItem1" value="用戶名: " /> 
  27.             < Item id="2" key="StatusItem2" value="用戶組: " /> 
  28.             < Item id="3" key="StatusItem3" value="上次登錄時(shí)間: " /> 
  29.             < Item id="4" key="StatusItem4" value="本次登錄時(shí)間:" /> 
  30.         < /Statusbar> 
  31.     < /Toolbar> 
  32.     < Form> 
  33.         < MainForm> 
  34.             < Item id="0" key="MainForm" value="xx" /> 
  35.             < Item id="1" key="buttonGo" value="開始" /> 
  36.             < Item id="2" key="buttonStop" value="停止" />          
  37.             < Item id="3" key="groupBox1" value="用戶信息" /> 
  38.             < Item id="4" key="groupBox2" value="常規(guī)數(shù)據(jù)" />      
  39.         < /MainForm> 
  40.         < UserLoginForm> 
  41.             < Item id="0" key="UserLoginForm" value="用戶登錄" /> 
  42.             < Item id="1" key="labelTitle"  value="xx" /> 
  43.             < Item id="2" key="labelUsername" value="用戶名" /> 
  44.             < Item id="3" key="labelPassword" value="密碼" /> 
  45.             < Item id="4" key="buttonLogin" value="登錄" /> 
  46.         < /UserLoginForm> 
  47.         < ChangePasswordForm> 
  48.             < Item id="0" key="ChangePasswordForm" value="修改密碼" /> 
  49.             < Item id="1" key="label1" value="原密碼" /> 
  50.             < Item id="2" key="label2" value="新密碼" /> 
  51.             < Item id="3" key="label3" value="再輸入" /> 
  52.             < Item id="4" key="buttonConfirm" value="確認(rèn)" /> 
  53.             < Item id="5" key="buttonCancel" value="取消" /> 
  54.         < /ChangePasswordForm> 
  55.     < /Form> 
  56.     < Dialog> 
  57.         < Title> 
  58.             < Item id="0" key="0001" value="xx" /> 
  59.             < Item id="1" key="0002" value="添加測試" /> 
  60.             < Item id="2" key="0003" value="添加用戶" /> 
  61.             < Item id="3" key="0004" value="修改密碼" /> 
  62.         < /Title> 
  63.         < Message> 
  64.             < Item id="0" key="0000" value="一切正常" /> 
  65.             < Item id="1" key="2001" value="用戶名或密碼錯(cuò)誤" /> 
  66.             < Item id="5" key="2002" value="密碼不一致" /> 
  67.             < Item id="6" key="2003" value="用戶名已存在" /> 
  68.             < Item id="7" key="2004" value="添加用戶成功" />              
  69.         < /Message>              
  70.     < /Dialog> 
  71. < /AirControl> 

這里是語言文件的局部,主體分為四個(gè)部分,Menu, Toolbar, Form 和 Dialog,分別對(duì)應(yīng)菜單,工具欄,窗體和對(duì)話框的顯示字符串。

在Form里面,其每個(gè)子樹分別對(duì)應(yīng)一個(gè)窗體。XML每項(xiàng)有三個(gè)域,id 這個(gè)只是用來標(biāo)號(hào),程序中為用,key,value形成一個(gè)字典,key是控件的名稱,value是控件的text。在Dialog中key用數(shù)字編號(hào)。

做其他語言文件時(shí),只用將value里面的值改成對(duì)應(yīng)的語言即可。

當(dāng)然,我們也不一定用XML來寫語言文件,簡單的ini文件也行。下面設(shè)計(jì)讀取這個(gè)XML的類,

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Xml;  
  6.  
  7. namespace AirLibrary  
  8. {  
  9.     /**//// < summary>  
  10.     /// 本地化類  
  11.     /// < /summary>  
  12.     public static class Localization  
  13.     {  
  14.         Property#region Property  
  15.         public static string Lang { getprivate set; }  
  16.         public static bool HasLang { getset; }          
  17.         #endregion //Property  
  18.  
  19.         Attribute#region Attribute  
  20.         private static Dictionary< string, Dictionary< stringstring>> forms = new Dictionary< string, Dictionary< stringstring>>();  
  21.         private static Dictionary< stringstring> menu = new Dictionary< stringstring>();  
  22.         private static Dictionary< stringstring> toolbar = new Dictionary< stringstring>();  
  23.         private static Dictionary< stringstring> dialog = new Dictionary< stringstring>();  
  24.         #endregion //Attribute  
  25.  
  26.         Method#region Method  
  27.          public static void AddForm(string formName)  
  28.          {  
  29.              forms.Add(formName, new Dictionary< stringstring>());  
  30.              //formMap.Add(formName, count++);  
  31.          }  
  32.    
  33.         /**//// < summary>  
  34.          /// 加載語言文件  
  35.          /// < /summary>  
  36.          /// < param name="lang">語言< /param>  
  37.          /// < returns>< /returns>  
  38.          public static bool Load(string lang)  
  39.          {  
  40.              string path = "";  
  41.              Localization.Lang = "English";  
  42.    
  43.              menu.Clear();  
  44.              toolbar.Clear();  
  45.              dialog.Clear();  
  46.              exception.Clear();  
  47.              foreach (Dictionary< stringstring> form in forms.Values)  
  48.                  form.Clear();  
  49.                
  50.              switch (lang)  
  51.              {  
  52.                  case "zh":                     
  53.                      path = @"resources/lang-zh.xml";  
  54.                      break;  
  55.                  case "en":                    
  56.                      path = @"resources/lang-en.xml";  
  57.                      break;  
  58.                  default:                      
  59.                      path = @"resources/lang-zh.xml";  
  60.                      break;  
  61.              }  
  62.    
  63.              return readLanguage(path);  
  64.          }  
  65.          #endregion //Method  
  66.    
  67.          Function#region Function  
  68.          private static bool readLanguage(string path)  
  69.          {  
  70.              // Read the language file  
  71.              XmlReader reader;  
  72.              try 
  73.              {  
  74.                  reader = XmlReader.Create(path);  
  75.              }  
  76.              catch (Exception)  
  77.              {  
  78.                  return false;  
  79.              }  
  80.    
  81.              // Begin to parase  
  82.             try 
  83.             {  
  84.                 reader.ReadToFollowing("AirControl");  
  85.                 Localization.Lang = reader.GetAttribute("language");  
  86.  
  87.                 paraseXml(reader, "Menu", menu);  
  88.                 paraseXml(reader, "Toolbar", toolbar);  
  89.     
  90.                 foreach (string formName in forms.Keys)  
  91.                 {  
  92.                    paraseXml(reader, formName, forms[formName]);  
  93.                 }  
  94.                 paraseXml(reader, "Dialog", dialog);                 
  95.             }  
  96.             catch (Exception)  
  97.             {  
  98.                 return false;  
  99.             }  
  100.             return true;  
  101.         }  
  102.  
  103.         private static void paraseXml(XmlReader reader, string item, Dictionary< stringstring> obj)  
  104.         {  
  105.             // Get the attribute key & value   
  106.             reader.ReadToFollowing(item);  
  107.  
  108.             XmlReader subreader = reader.ReadSubtree();  
  109.             while (subreader.Read())  
  110.             {  
  111.                 if (subreader.NodeType == XmlNodeType.Element && subreader.Name == "Item")  
  112.                     obj.Add(subreader.GetAttribute("key"), subreader.GetAttribute("value"));  
  113.             }  
  114.         }  
  115.         #endregion //Function  
  116.  
  117.         Property#region Property  
  118.         public static Dictionary< stringstring> Menu  
  119.         {  
  120.             get 
  121.             {  
  122.                 return menu;  
  123.             }  
  124.             private set 
  125.             { }  
  126.         }  
  127.  
  128.         public static Dictionary< stringstring> Toolbar  
  129.         {  
  130.             get 
  131.             {  
  132.                 return toolbar;  
  133.             }  
  134.             private set 
  135.             { }  
  136.         }  
  137.  
  138.         public static Dictionary< string, Dictionary< stringstring>> Forms  
  139.         {  
  140.             get 
  141.             {  
  142.                 return forms;  
  143.             }  
  144.             private set 
  145.             { }  
  146.         }  
  147.    
  148.         public static Dictionary< stringstring> Dialog  
  149.         {  
  150.             get 
  151.             {  
  152.                return dialog;  
  153.             }  
  154.             private set 
  155.             { }  
  156.         }  
  157.         #endregion //Property  
  158.     }  

這里我使用靜態(tài)類來讀取和保存,這樣效率相對(duì)會(huì)高一些。讀取XML時(shí),我使用的是XmlReader,它使用流式讀取,速度也比較快。

Forms, Menu, Toolbar, Dialog幾個(gè)屬性分別對(duì)應(yīng)XML中的子樹,使用.net中的Dictionary范型,F(xiàn)orms嵌套了一層Dictionary。

Load方法是加載語言文件,readLanguage 和paraseXML 函數(shù)對(duì)XML進(jìn)行解析,并保存字符串到對(duì)應(yīng)的屬性中。

AddForm這個(gè)方法是將每個(gè)窗體的動(dòng)態(tài)的添加到forms 里面。

在程序開始main 函數(shù)中,首先調(diào)用AddForm方法,添加所有窗體。

  1. // 添加所有窗體用于本地化(按XML中順序)  
  2. private static void AddForm()  
  3. {  
  4.     Localization.AddForm("MainForm");  
  5.     Localization.AddForm("UserLoginForm");  
  6.     Localization.AddForm("UserManageForm");  
  7.     Localization.AddForm("ChangePasswordForm");  

然后加載語言文件。 

  1. if (!Localization.Load("zh"))  
  2.             {  
  3.                 MessageBox.Show("無法加載語言配置文件, 將顯示英文.""錯(cuò)誤", MessageBoxButtons.OK,  
  4.                     MessageBoxIcon.Exclamation);  
  5.                 Localization.HasLang = false;  
  6.             }  
  7.             else 
  8.                 Localization.HasLang = true

在每個(gè)Form的Load事件中初始化每個(gè)控件的Text。 

  1. if (Localization.HasLang)  
  2.          RefreshLanguage();  
  3.  
  4.  
  5. // 更新窗體語言  
  6. public static void RefreshLanguage(Form form)  
  7. {            
  8.      form.Text = Localization.Forms[form.Name][form.Name];  
  9.      SetControlsLanguage(form, Localization.Forms[form.Name]);  
  10. }  
  11.  
  12.          遞歸更新每個(gè)控件Text  
  13.  
  14.  /// < summary>  
  15.  /// 設(shè)置control子控件語言  
  16.  /// < /summary>  
  17.  /// < param name="control">父控件< /param>  
  18.  /// < param name="obj">語言字典< /param>  
  19.  public static void SetControlsLanguage(Control control, Dictionary< stringstring> obj)  
  20.  {  
  21.       foreach (Control ctrl in control.Controls)  
  22.       {  
  23.          // set the control which one's key in the dictionary  
  24.          string text = "";  
  25.          if (obj.TryGetValue(ctrl.Name, out text))  
  26.                ctrl.Text = text;  
  27.    
  28.          if (ctrl.HasChildren)  
  29.                SetControlsLanguage(ctrl, obj);  
  30.        }  
  31.  } 

另外主窗體的Menu和Toolbar,我采用以下的方法更新。 

  1. // Refresh the menu language  
  2.  foreach (ToolStripMenuItem topItem in MainMenuStrip.Items)  
  3.  {  
  4.        topItem.Text = Localization.Menu[topItem.Name];  
  5.        foreach (ToolStripItem item in topItem.DropDownItems)  
  6.        {  
  7.              if (item is ToolStripMenuItem)  
  8.              {  
  9.                   string text = "";  
  10.                   if (Localization.Menu.TryGetValue(item.Name, out text))  
  11.                        item.Text = text;  
  12.              }  
  13.        }  
  14.  }  
  15.    
  16.  // Refresh the statusbar language  
  17.  foreach (ToolStripItem item in mainStatus.Items)  
  18.  {  
  19.       string text = "";  
  20.       if (Localization.Toolbar.TryGetValue(item.Name, out text))  
  21.               item.Text = text;  
  22.  } 

Dialog就直接調(diào)用Localization中的Dialog屬性即可。

需要轉(zhuǎn)變?yōu)椴煌Z言時(shí)只需要再調(diào)用一次Localization.Load方法。

這樣,就完成了C#實(shí)現(xiàn)多語言界面程序。  

小結(jié):

這種C#實(shí)現(xiàn)多語言界面程序的方式我思考了很久,也在網(wǎng)上查了一些資料,最后設(shè)計(jì)了這樣一種方式,XML中利用字典來記錄控件的語言在添加,讀取時(shí)非常方便,Localization類做成靜態(tài)類,在運(yùn)行時(shí)就相當(dāng)于一個(gè)常量,沒有構(gòu)造函數(shù)這樣的開銷,整個(gè)界面也可以再運(yùn)行時(shí)直接改變界面語言。當(dāng)然這種方法不一定是最好的, 如果有更好的方法歡迎指點(diǎn)。

【編輯推薦】

  1. 概述C#泛型機(jī)制
  2. 淺析C#異步套接字的實(shí)現(xiàn)過程
  3. 解析C#關(guān)鍵字之get、set、value、partial、where和yield
  4. 編程入門:C#類型和C#變量
  5. C#實(shí)現(xiàn)Strategy接口
責(zé)任編輯:book05 來源: cnblogs
相關(guān)推薦

2009-08-25 10:44:50

C#實(shí)現(xiàn)多語言

2011-08-05 17:54:33

Cocoa Touch 多語言

2012-04-19 11:40:21

Titanium

2009-07-17 10:02:29

WPF程序多語言支持

2014-07-09 09:20:06

WPFWPF應(yīng)用

2014-04-16 14:50:20

Spark

2021-09-07 10:17:35

iOS多語言適配設(shè)計(jì)

2021-06-29 21:48:32

開源語言架構(gòu)

2024-05-09 08:14:09

系統(tǒng)設(shè)計(jì)語言多語言

2009-08-13 17:04:09

C#語言C#程序

2025-02-03 00:25:00

Asp語言配置

2011-07-26 10:09:08

iPhone 多語言 國際化

2022-08-09 07:22:15

語言數(shù)據(jù)庫程序

2009-08-20 08:50:28

Windows Ser用戶界面包

2009-08-21 18:46:30

下載Server 20

2025-08-11 07:00:00

2013-10-16 15:50:01

iOS優(yōu)化本地化

2009-08-14 17:27:56

C#方法參數(shù)

2009-08-20 16:25:59

C# 匿名方法

2023-06-29 07:27:26

知識(shí)圖譜Shopee
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚洲一区二区三区三| 美美哒免费高清在线观看视频一区二区| 日韩一级欧美一级| 国产3p露脸普通话对白| 精品视频二区| 狠狠狠色丁香婷婷综合久久五月| 欧美高跟鞋交xxxxxhd| 国产熟妇搡bbbb搡bbbb| 亚洲国产91视频| 天天av天天翘天天综合网色鬼国产| 亚洲va韩国va欧美va精四季| 丰满肉肉bbwwbbww| 免费在线成人网| 久久久久久12| 亚洲人做受高潮| 香蕉视频一区二区三区| 欧美一区二区视频在线观看2022| 国产一区二区免费| 国产伦视频一区二区三区| 欧美激情亚洲综合| 亚洲第一天堂| 亚洲人成伊人成综合网久久久| 久久人人爽人人片| 精品三区视频| 欧美日韩国产在线播放| 97在线免费视频观看| 高清av在线| 99国产精品久久| 99精品欧美一区二区三区| 中文字幕久久网| 亚洲欧美日韩综合国产aⅴ| 九九热精品视频| 日本少妇aaa| 欧美视频网址| 亚洲精选中文字幕| 国产麻豆xxxvideo实拍| 亚洲成av人片在线观看www| 欧美三区在线观看| 熟女人妇 成熟妇女系列视频| 91超碰免费在线| 尤物在线观看一区| av电影一区二区三区| 午夜在线观看视频| 国产色一区二区| 欧美一级二级三级九九九| 神马久久久久久久久久| 成人高清免费观看| 成人黄动漫网站免费| 国产视频手机在线| 国产麻豆精品在线观看| 亚洲精品欧美日韩专区| 国产精品一级视频| 国产精品一区二区久久不卡 | 69成人免费视频| 一区在线免费观看| 国模叶桐国产精品一区| 天天操天天射天天爽| 91视频在线视频| 日韩国产一区| 中日韩美女免费视频网址在线观看| av无码av天天av天天爽| 日韩影视高清在线观看| 日韩麻豆第一页| 丰满少妇一区二区| 国产日产一区| 最近2019年手机中文字幕| 国产免费嫩草影院| 一本一道久久综合狠狠老| 欧美成人免费全部| 国产一级片免费看| 亚洲制服av| 国产mv免费观看入口亚洲| 五月婷婷激情五月| 韩国毛片一区二区三区| av免费精品一区二区三区| 亚洲美女性生活| 91美女精品福利| 欧美一二三四五区| 成人免费看片| 午夜精品影院在线观看| 不卡影院一区二区| 99热这里有精品| 欧美精品一区二区在线观看| 丰满少妇一区二区三区| 青青草91久久久久久久久| 精品久久久91| 日本一二三区视频| 奇米精品一区二区三区在线观看| 成人av在线亚洲| 精品国产999久久久免费| av在线一区二区三区| 日本不卡一区二区三区在线观看 | 欧美精品电影在线| 天堂网视频在线| 国产在线播放一区| 精品久久久久久一区| 二区三区在线播放| 亚洲国产精品久久不卡毛片 | 熟妇熟女乱妇乱女网站| 国产成人免费看一级大黄| 波多野结衣中文字幕一区| 奇米精品在线| 丁香花在线观看完整版电影| 色婷婷综合久色| 亚洲妇熟xx妇色黄蜜桃| 色天下一区二区三区| 久久精品中文字幕| 中文字幕激情小说| 成人中文字幕在线| 制服诱惑一区| 欧洲亚洲两性| 精品处破学生在线二十三| 国产一二三av| 校园激情久久| 99re在线视频上| 1024国产在线| 欧美性生活大片免费观看网址| 国产探花在线观看视频| 亚洲警察之高压线| 欧美大片免费看| 91无套直看片红桃| 国产亚洲一二三区| 免费无遮挡无码永久视频| 久久久久毛片免费观看| 色诱女教师一区二区三区| 欧美黑人一区二区| 成人自拍视频在线| 黄色一级大片免费| 动漫一区二区三区| 日韩在线免费视频| 中文字幕av第一页| 久久久亚洲国产美女国产盗摄 | 亚洲h片在线看| 欧美挠脚心视频网站| 亚洲精品一区二区三区影院忠贞| 亚洲国产91| 91黄色精品| 在线看女人毛片| 91精品国产综合久久久久久漫画 | 国模 一区 二区 三区| 成人午夜在线观看| 黄网站视频在线观看| 亚洲欧美偷拍自拍| 欧美成人在线免费| 国产乱码精品一区二三区蜜臂 | 精品国产露脸精彩对白| 日本中文在线视频| 国内外成人在线| 一级做a爰片久久| 国产a亚洲精品| 最新69国产成人精品视频免费| 成年人视频免费| 国产欧美日韩三级| 欧美午夜aaaaaa免费视频| 欧美三级三级| 国产精品亚洲第一区| 888av在线| 欧美日韩大陆在线| 日本高清一二三区| 国产成人精品一区二| 国产乱子伦精品无码专区| 爱高潮www亚洲精品| 97在线日本国产| 亚洲色图狠狠干| 在线中文字幕一区二区| 欧美成人另类视频| 韩日av一区二区| 一二三四中文字幕| 精品三级av| 国产成人精品av在线| 91精彩在线视频| 欧美一区二区三区在线观看视频| 激情综合网五月天| 91视频免费看| www.com操| 午夜精品免费| 欧美二级三级| 国产精品一区三区在线观看| 欧美黑人一区二区三区| 五月天婷婷在线观看| 欧洲av在线精品| www.超碰在线观看| 91在线小视频| 潘金莲激情呻吟欲求不满视频| 欧美激情 亚洲a∨综合| 精品视频在线观看| 日本一区二区中文字幕| 午夜精品久久久久久久99热浪潮| 每日更新在线观看av| 欧美乱妇15p| 国产成人亚洲精品自产在线| 国产欧美1区2区3区| 日本乱人伦a精品| 欧美人妻精品一区二区三区 | 国产精品青青草| 网友自拍亚洲| 九九热99久久久国产盗摄| 可以在线观看的av| 精品国产青草久久久久福利| 波多野结衣午夜| 亚洲成人一区在线| 四虎影视1304t| 99国产精品久久久久| 婷婷激情5月天| 日韩中文字幕不卡| www.成年人视频| 91亚洲一区| 欧美成人dvd在线视频| 欧一区二区三区| 国产精品高潮呻吟久久av野狼| 性爱视频在线播放| 色老头一区二区三区| 手机av免费在线观看| 717成人午夜免费福利电影| 国产www在线| 亚洲国产视频网站| 性生交大片免费全黄| 久久无码av三级| 天天色天天干天天色| 免费在线观看一区二区三区| 国产二区视频在线播放| 欧美日韩亚洲一区| 影音先锋男人的网站| 欧美亚洲精品在线| 欧美在线视频二区| 欧洲vs亚洲vs国产| 国产精品成人观看视频免费| 国产一区二区视频在线看| 国产精品免费久久久久久| jizz内谢中国亚洲jizz| 高清在线视频日韩欧美| 日本理论片午伦夜理片在线观看| 最好看的2019年中文视频| www亚洲人| 一本大道亚洲视频| 国产一级片在线播放| 亚洲欧美福利视频| 欧美成人片在线| 亚洲欧美国产制服动漫| 日本精品专区| 精品亚洲一区二区三区在线观看| 日本精品一二区| 亚洲国产精品人人爽夜夜爽| 狠狠躁日日躁夜夜躁av| 日韩精品一区二区三区在线 | 国产精品久久久久aaaa樱花| 人妻熟女aⅴ一区二区三区汇编| 成人国产电影网| 亚洲av网址在线| 99久久婷婷国产精品综合| 波多野结衣视频播放| 91偷拍与自偷拍精品| 久久无码人妻精品一区二区三区| 91免费视频大全| 亚洲精品视频大全| 久久精品欧美日韩精品| 在线观看日本黄色| 中文字幕佐山爱一区二区免费| 搜索黄色一级片| 樱花影视一区二区| 国产无码精品在线观看| 精品久久中文字幕久久av| 中文字幕视频网站| 欧美日韩激情一区二区三区| 91麻豆成人精品国产| 欧美va亚洲va在线观看蝴蝶网| 亚洲成熟女性毛茸茸| 日韩精品极品视频| 成年人视频在线观看免费| 久久视频在线播放| wwww亚洲| 日本视频久久久| 日韩大陆av| 成人动漫在线观看视频| 少妇精品久久久| 在线观看成人av| 樱桃成人精品视频在线播放| 欧洲av无码放荡人妇网站| 国产黄色在线观看| 欧美一区二区三区四区久久| 欧美77777| 一本色道久久88亚洲综合88| 国产一二区在线观看| 97精品视频在线| 成人福利片在线| 国产成人精品一区二区三区福利| 日韩母乳在线| 大桥未久一区二区| 亚洲欧美日韩国产| 久久久久xxxx| 91最新地址在线播放| 中文字幕无码日韩专区免费| 亚洲国产精品久久久久秋霞影院 | 久久9999久久免费精品国产| 日韩欧美成人免费视频| 中文字幕久久熟女蜜桃| 亚洲成色999久久网站| 成年人免费在线视频| 欧美激情精品久久久久久黑人| 欧美最新精品| 国产66精品久久久久999小说| 国产伦精品一区二区三区四区 | 午夜精品久久久久久久爽| 亚洲欧洲日产国产网站| 欧美激情成人动漫| 国产精品久久久久秋霞鲁丝| 国产成人夜色高潮福利影视| 亚洲永久激情精品| 美女爽到呻吟久久久久| 国产成人精品一区二区三区在线观看 | 国产欧美亚洲视频| 精品国产一区二区三区不卡蜜臂| 亚洲精品中字| 麻豆9191精品国产| 少妇丰满尤物大尺度写真| 国产精品丝袜久久久久久app| 日韩少妇高潮抽搐| 欧美成人video| 毛片在线播放a| 国产精品av在线播放| 日韩深夜福利| 国内精品在线观看视频| 国产高清亚洲一区| 成人免费毛片xxx| 欧美日韩一区二区三区免费看 | 久久亚洲精品毛片| 欧美性片在线观看| 欧美精品123| 国产精品久久久久久模特 | 韩国精品久久久999| 日韩在线亚洲| 91免费版看片| 国产乱码字幕精品高清av | 亚洲精品欧洲| av不卡中文字幕| 亚洲精品精品亚洲| 国产欧美熟妇另类久久久| 日韩在线视频网| 欧美亚洲综合视频| 亚洲一区二区不卡视频| 久久精品久久久精品美女| 国产7777777| 精品视频在线看| 男人影院在线观看| 91老司机在线| 欧美日本不卡高清| 26uuu国产| 亚洲成人一区二区| 天堂在线视频观看| 欧美亚洲视频在线看网址| 日韩成人动漫在线观看| 99色精品视频| 羞羞的视频在线看| 亚洲免费伊人电影在线观看av| 国产免费拔擦拔擦8x高清在线人| 国产一区二区黄色| 国产精品人人爽人人做我的可爱 | 国产精品私人自拍| 国产精品熟女久久久久久 | 黄色综合网址| 日韩国产精品一区二区三区| 麻豆成人91精品二区三区| 小早川怜子一区二区的演员表| 日韩丝袜美女视频| heyzo高清在线| 欧美一区视久久| 精品综合久久久久久8888| 久草免费在线视频观看| 亚洲国内精品在线| 国产韩日精品| 在线视频亚洲自拍| 成人免费av在线| 国产免费一级视频| www国产精品视频| 成人h动漫精品一区二区器材| 国产黄页在线观看| 国产精品久久影院| 草草视频在线播放| 日本精品久久久| 99视频精品全国免费| 一级黄色电影片| 色婷婷综合久久久久中文一区二区| 调教视频免费在线观看| 国产精品久久久久久久免费大片| 美女网站久久| 九九精品视频免费| 日韩美女av在线| 国产精品国产三级在线观看| 91成人在线观看喷潮教学| 国产精品久久综合| 视频一区二区免费| 91精品免费视频| 老司机一区二区三区| 麻豆天美蜜桃91| 亚洲欧美一区二区三区情侣bbw| 亚洲伊人伊成久久人综合网| 色综合久久久久无码专区| 亚洲人精品午夜| 九色在线免费| 岛国视频一区免费观看|