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

Web應用程序中Resource Bundle技術概述

開發 前端
世界經濟日益全球化的同時,一個應用程序需要在全球范圍內使用勢在必然。傳統的程序設計方法將可翻譯信息如菜單按鈕的標簽,提示信息,幫助文檔等文字信息硬編碼在程序代碼中,不能很好的適應全球化發展,程序的擴展性差,維護成本高。

背景概述

世界經濟日益全球化的同時,一個應用程序需要在全球范圍內使用勢在必然。傳統的程序設計方法將可翻譯信息如菜單按鈕的標簽,提示信息,幫助文檔等文字信息硬編碼在程序代碼中,不能很好的適應全球化發展,程序的擴展性差,維護成本高。一個能支持全球化的應用程序,必須實現單一可執行的程序,動態地使用資源(Single Source Single Executable),圖1 是兩種模型的對比圖。

圖 1. 傳統的程序模型和支持全球化程序模型

Web應用程序中Resource Bundle技術概述

Web應用程序中Resource Bundle技術概述

對于一個能支持全球化的應用程序來說:

一方面需要考慮的是用戶的語言環境(我們稱作 Language Locale):這里主要就是指翻譯,在不同的國家用他們自己的語言正確運作軟件,讓客戶感覺這個產品是為他們而設計的;

另一方面就是用戶的文化環境(我們稱作 Culture Locale):主要處理的是多元文化的支持,包括貨幣、日歷、時間、日期、排序、界面方向性(Bi-directional) 等符合各個國家自己習慣的顯示方式。

圖2 概述了如何使得一個應用程序(C/S 或者 B/S)支持全球化和本地化。

圖 2. 全球化應用程序

Web應用程序中Resource Bundle技術概述Web應用程序中Resource Bundle技術概述

 

本文結合項目實踐,總結了 web 應用程序中 Java,JSP,Dojo 和 HTML 四種不同語言是如何管理 Resource Bundle 的,實現單一可執行程序動態讀取資源文件,從而支持全球化和本地化。主要從三個方面來闡述:資源文件存儲和命名規則;用戶語言區域信息的讀取;如何取得對應語言的資源文件中的鍵值。

Java 程序中的 Resource Bundle 管理

ResourceBundle 是一個機制,主要用來根據用戶的語言環境展示不同的界面文字給用戶,讓用戶感覺這個應用程序為我而定制。

然而 Java 中的 ResourceBundle 是一個類,包含在標準的 Java 發行版中。圖3總結了 Java 程序中 ResourceBundle 的管理機制。

圖 3. Java 程序 Resource Bundle 管理流程

Web應用程序中Resource Bundle技術概述

Web應用程序中Resource Bundle技術概述

Java 程序中資源文件的存儲和命名

在一個多模塊的 Java 應用程序中,一般每個模塊都有自己獨立的資源文件(也叫 Resource Bundles),Resource Bundle 一般存儲在對應模塊的 src/resources/bundles/java/ 目錄下面。通常的命名規則是:模塊名_語言_國家 .properties({moduleName}_{language}_{country}.properties)。對應資源文件中的每一個 key,一般都是小寫字母開頭,用下劃線表示這個 key 在程序中的層級結構,并且按照字母順序排序,便于管理和查找,如清單1所示的例子。

清單 1. Java properties 文件示例

 

  1. 英文Properties 文件: 
  2.     helloKey=Hello! 
  3.     goodMorningKey=Good Morning! 
  4.     goodEveningKey=Good Evening! 
  5.      
  6. 日語Properties 文件: 
  7.     helloKey=\u3053\u3093\u306b\u3061\u306f! 
  8.     goodMorningKey=\u304a\u306f\u3088\u3046! 
  9.     goodEveningKey=\u3053\u3093\u3070\u3093\u306f! 

Java 程序對資源文件的回滾機制:當對應翻譯的資源文件不存在時,將使用"默認"的資源文件(通常為英文),圖 4 是 Java 資源文件的組織方式。

圖 4. Java 資源文件組織方式

Web應用程序中Resource Bundle技術概述

Java 中用戶語言環境(Locale)和資源文件的讀取

根據用戶使用的區域信息來決定從哪個 Resource Bundle 里面讀取對應的 key 值。Java 語言通過 java.util.Locale 類來表示區域,一個 Locale 實例就代表了一個特定的區域。在實際的項目中,通常將讀取資源文件包裝成一個類,方便后續代碼的重用和管理,如清單 2 的示例所示。

清單 2. Java 中 ResourceBundleService 使用

 

  1. public class LocalizedPropertyResources extends MessageResources {  
  2. private static final String MODULE_NAME = "resourceBundle.module.name" 
  3. public String getProperty(String key, Object... parameters) {  
  4. Locale locale = getUserLocale();  
  5. String value = getProperty(key, locale, parameters);  
  6. Return value;  
  7.  
  8. public String getProperty(String key, Locale locale, Object... parameters) {  
  9. ResourceBundle resourceBundle = ResourceBundle.getBundle(MODULE_NAME, locale);  
  10. String value resourceBundle.getString(key, parameters);  
  11. return value;  
  12.  

JSP 中的 Resource Bundle 管理

資源文件管理:JSP 是基于 Java 技術,所以 Java 中的 ResourceBundle 機制也可以應用于 JSP,同樣以 .properties 形式存儲資源文件,資源文件的命名規則、資源文件的存儲結構,key 的命名規則等都可以遵循 Java 程序中的 Resource Bundle 管理機制。

用戶語言環境的設定:HTTP 協議通過 Accept-Language 請求頭將本地化信息從瀏覽器傳遞至服務器, JSTL fmt 庫中的定制標記又會利用這些方法來自動地確定用戶的語言環境,從而相應地調整它們的輸出。同時用戶也可以通過 來設置用戶語言環境。

對于 JSP 中資源文件的讀取有以下三種情況:

1、使用 fmt 消息標簽:JSP 標準標簽庫(JSP Standard Tag Library,JSTL)中的 fmt標簽支持通過資源文件(ResourceBundle)對文本內容進行本地化,該功能可以對一個特定的語言請求作出相應的響應,它使用了 J2SE 的 ResourceBundle 來保持各種翻譯過的語言編碼。另外用來設置地區,比如,這等于設定了語言和國家代碼。默認 JPS 將讀取 Accept-Language 信息。還可以指定 ResourceBundle,比如: 。一旦設定了 locale(地區)或 ResourceBundle,就可以使用 來把原文進行相應的轉化,同時還可以使用< fmt:requestEncoding/>來設定請求的字符編碼。如清單3 示例所示:

清單 3. JSTL fmt 標簽示例

 

  1. //myTest.jsp 
  2. <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> 
  3.  
  4. <html> 
  5.   <head> 
  6.     <title>JSTL fmt: Localized tag testing</title> 
  7.   </head> 
  8.  
  9.  <body> 
  10.   <fmt:requestEncoding value="UTF-8" /> 
  11.   <fmt:setLocale value="zh_TW"/> 
  12.   <fmt:setTimeZone value= "GMT+8" scope="request"/> 
  13.   <fmt:bundle basename="src.resources.bundles.java.menu "
  14.       <fmt:message key="OK"/><br/> 
  15.       <fmt:message key="CANCEL"/><br/> 
  16.   </fmt:bundle> 
  17. //也可以通過下面的方式獲取資源文件 
  18.  
  19.   <fmt:setBundle basename="src.resources.bundles.java.menu"    var="resources"/> 
  20.     … 
  21.     <fmt:message key="OK"/><br/> 
  22.     <fmt:message key="CANCEL"/><br/> 
  23.      … 
  24.   </body> 
  25. </html> 

2、被 Spring 管理的 JSP,通常 JSP 中有這樣的 taglig"",這種情況下可以使用 Spring message 標簽。

  1. <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>  
  2. <spring:message code="common_button_ok"/> 

3、對于由 Struts 操作類提供的JSP,可以使用 Struts bean 消息標簽:

  1. <%@ taglib uri="/tags/struts-bean" prefix="bean" %>  
  2. <bean:message key=" common_button_ok "/> 

Dojo 中的 Resource Bundle 管理

Dojo 是一個 JavaScript 庫,提供了一個有用的工具來創建豐富的 Web 客戶端界面。同時 Dojo 也提供了 API 支持全球化功能,如翻譯資源包,函數的格式化和解析日期、數字和貨幣,Dojo 對全球化的支持主要基于 CLDR (Common Locale Data Repository) 和 ICU 的使用。 這一小節總結了 Dojo 中資源文件的管理,用戶區域信息(locale)和資源文件的讀取,如圖5所示。

圖 5. Dojo 中資源文件管理

Web應用程序中Resource Bundle技術概述

Web應用程序中Resource Bundle技術概述

Dojo 中資源文件的存儲和命名

UTF-8 是 Dojo 程序編碼的先決條件,Dojo 腳本一般將使用 HTML,JSP,Servlet,js等編寫,所以這些文件必須以 UTF-8 編碼。Dojo 用 JSON 格式來組織資源文件,首先在 /nls 目錄下有一個主資源文件(一般是英文),主資源文件中定義了支持的區域,區域的值設置為 true 或者 false,如清單4所示。

清單 4. Dojo 主資源文件的定義

 

  1. define({ 
  2.       root: { 
  3.         OK: "Ok"
  4.         CANCEL: "Cancel"
  5.         OK_CANCEL: "${OK}, ${CANCEL}" 
  6.       }, 
  7.       "ko"true
  8.       "ja"true
  9.       "ru"false
  10.       "zh-cn"true 
  11.     }); 

翻譯的資源文件應放在/ nls / 目錄中,目錄的命名需要符合下面的規范:

  • 目錄的名稱必須要全部小寫
  • 用橫線(而不是下劃線)分割語言和國家,比如 zh-cn,zh-tw 等,如清單5所示。

清單 5. 翻譯資源文件的目錄結構

 

  1. /src/web/js/nls/menu.js       ... 主資源文件,用于默認的消息顯示 
  2.     /src/web/js/nls/ko/menu.js    ... 韓語的翻譯文件 
  3.                     /ja/menu.js    ... 日語的翻譯文件 
  4.                     /ru/menu.js    ...俄語的翻譯文件 
  5.                      /zh-cn/menu.js  ...簡中的翻譯文件 
  6.                     ... 

Dojo 資源文件的回滾機制為:在 / nls 目錄的根目錄下如果檢測到區域設置,但 nls 目錄中不存在特定于區域設置的資源,則將使用主包;當主資源文件中某個語言設置為 false 時,即使該語言的資源文件存在,也將使用主包。

Dojo 中用戶語言環境(Locale)和資源文件的讀取

Dojo 和 Java 以相同的方式支持用戶區域信息,但 Dojo 和 Java 實現之間存在微小差異。

  • "Dojo 和 Java 對區域設置命名約定有一些區別,Dojo 使用" - "(連字符)作為連接語言代碼,國家代碼和變體的分隔符,而 Java 使用"_"(下劃線)。例如,Java 中的 "zh_CN" 與 Dojo 中的 "zh-cn" 相似。
  • 像 Java 中的默認用戶語言區域一樣,Dojo 有一個全局變量 dojo.locale 用來存儲默認 locale 值,但是我們不能直接修改 dojo.locale,可以通過 dojoConfig.locale 來對 dojo.locale 做初始化工作。
  • 如果 dojoConfig.locale 未定義,Dojo 使用瀏覽器的顯示語言作為用戶區域設置。另外 dojoConfig.locale 的設定需要在加載 dojo.js 之前,這樣設置的 dojoConfig.locale 才會起效果。如清單 6 是一個示例將用戶的 locale 信息保存在 sessionScope,然后傳遞給 dojoConfig。

清單 6. 將用戶 locale 保存在 sessionScope 傳遞給 dojoConfig

 

  1. var dojoConfig = { 
  2.             async: 'sync'
  3.             baseUrl: ''
  4.             locale: '${sessionScope.userLanguageLocale}'
  5.              
  6.              bindEncoding: "utf-8"
  7.                 … 
  8.         }; 

 

userLanguageLocale:是應用程序中用戶所設定的 locale,每個應用程序可能不太一樣。

Dojo 中有兩種方式讀取資源文件:

方式 1:又叫 AMD 方式,通過 dojo/i18n! 這個插件加載資源文件,首先檢測 dojoConifg.locale 是否設置,如果設置了就讀取 dojoConfig.locale,否則就會使用瀏覽器的顯示語言讀取對應的翻譯資源文件。清單 7 是 dojo/i18n! 的使用示例。

清單 7. Dojo/i18n!使用示例

 

  1. ...  
  2. <script src="dojo-release-1.9.1/dojo/dojo.js" data-dojo-config="async: true, parseOnLoad: true></script>  
  3. <script>  
  4. require(["dojo/string""dojo/i18n!js/nls/menu"],  
  5. function(string, resources){  
  6. var strOk = resources.OK;  
  7. alert(strOk);  
  8. });  
  9. </script>  
  10. ... 

 

方式 2: 使用 dojo.requireLocalization 加載資源文件,dojo.i18n.getLocalization 讀取資源文件,這個是舊的資源加載方式,新的 Dojo 版本都將采用 AMD 的方式,不過這種方式用戶可以指定 locale 信息,缺省 locale 的時候,采用和 AMD 同樣的 locale 解析方式。清單8 是一個示例。

清單 8. Dojo. requireLocalization 使用示例

  1. <script src="dojo-release-1.9.1/dojo/dojo.js" data-dojo-config="async: true, parseOnLoad: true></script>  
  2. <script>  
  3. dojo.require("dojo.i18n");  
  4. dojo.requireLocalization("js""menu");  
  5. var resources = dojo.i18n.getLocalization("js""menu", locale);  
  6. //或者省去 locale 參數,var resources = dojo.i18n.getLocalization("js""menu" 
  7. alert(resources.OK);  
  8. </script>  
  9. ... 

HTML 中的 Resource Bundle 管理

HTML 中的硬編碼(Hard Code)通常分為兩種情況:一種情況是 HTML 頁面不涉及任何編程邏輯,這時候可以翻譯整個 HTML 文件(這種方式在開發過程中不需要特殊處理),或者將 HTML 變更為 JSP,這樣就可以利用 JSP 中 fmt 標簽將 Hard Code 提取出來,如清單 9 示例所示。

清單 9. HTML 更改為 JSP

 

  1. //Index.html  
  2. <html>  
  3. <head>  
  4. <script language="JavaScript" 
  5. window.location = "/login.do" 
  6. </script>  
  7. <title> Welcome Page </title>  
  8. </head>  
  9. <body>  
  10. …  
  11. </body>  
  12. </html>  
  13. //將 Index.html 更改為 Index.jsp,這樣就可以利用 JSP 中 fmt 標簽  
  14. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  
  15. <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>  
  16. <html>  
  17. <head>  
  18. <script language="JavaScript" 
  19. …  
  20. </script>  
  21. <title> <fmt:message key="common_welcome" /></ title>  
  22. </head>  
  23. <body>  
  24. …  
  25. </body>  
  26. </html>  
  27. //test.properties 
  28.  Common_welcome=Welcome Page  
  29. … 

//將 Index.html 更改為 Index.jsp,這樣就可以利用 JSP 中 fmt 標簽

另外一種情況是 HTML 作為 Dojo widget 模板文件,這種情況下可以使用 dojo API 的 i18n 庫來處理硬編碼消息,其處理方式和 Dojo 很類似,模板 HTML 文件中使用的 Key 需要在 Widget 的 js 文件中定義和獲取。下面將通過示例介紹 HTML 作為 Dojo 模板文件時,如何抽取當中的 hard code 信息。通常分三個步驟完成模板 HTML 文件中的字符串抽取。

***步: 將 HTML 中的字符串放到一個資源文件如 message.js 中,資源文件的組織方式和 Dojo 是一樣的;

第二步: 在 Dojo widget 的 js 文件中使用 Dojo Resource Bundle 獲取資源文件,定義變量獲取對應的Key值;

第三步: 在HTML模板文件中使用 Dojo .js 文件中定義的變量。如清單 10 所示。

清單 10. HTML 作為 Dojo Widget 模板

  1. Test.html  
  2. <div dojoAttachPoint="testNode" style="display:inline" 
  3. <table style="position: relative; margin: 20px 0 0 120px; padding: 0;" 
  4. <tr>  
  5. <td style="text-align: right;">Username:</td> //原來的 hard code  
  6. <td style="text-align: right;">${usernameLabel}</td> //Resource out 之后的變量引用  
  7. ….  
  8. </tr>  
  9. </div>  
  10. Test.js  
  11. dojo.requireLocalization("js""message");  
  12. dojo.declare("Test") {  
  13. templatePath: dojo.moduleUrl("common"" /html/Test.html"),  
  14. usernameLabel: "" 
  15. postMixInProperties: function(){  
  16. this.inherited(arguments);  
  17. var resources = dojo.i18n.getLocalization("js""message");  
  18. this.usernameLabel = resources.labels.username; //獲取資源文件  
  19.  

清單 11. HTML 中特殊硬編碼處理

  1. // Hard Code  
  2. <html>  
  3. <body>  
  4. <select id="Product" 
  5. <option>Is Not</option 
  6. <option>Is</option 
  7. </select 
  8. </body>  
  9. </html>  
  10. //處理后的 HTML  
  11. <html>  
  12. <body>  
  13. <select id="Product" 
  14. <option value="Is Not"> ${ Label.IS_NOT}</option
  15. <option value="Is">${Label.IS}</option 
  16. </select 
  17. </body>  
  18. </html> 

總結

本文總結了如何存儲 web 應用程序中使用不同框架時的資源文件及其命名規則,如何取得資源文件中的鍵值。希望這篇文章能為正在開發國際化 Web 應用程序的讀者提供一定的參考價值。

責任編輯:未麗燕 來源: IBM developerWorks中國
相關推薦

2009-07-16 17:09:02

Swing應用程序

2009-04-01 14:33:33

2009-09-22 12:59:07

ibmdwWeb

2012-05-14 17:35:28

移動Web

2009-07-29 10:30:53

Web應用程序ASP.NET

2009-08-24 14:19:27

C# Windows應

2009-07-22 17:32:40

ASP.NET應用程序

2013-06-24 10:21:47

面向對象Web應用JavaScript

2010-05-20 09:48:36

2011-03-22 14:12:17

LAMP

2015-02-02 15:46:59

Web應用架構大數據

2022-10-24 16:19:45

2010-03-09 13:27:23

Web 2.0應用程序

2023-01-09 17:04:24

2010-02-01 14:05:03

2009-07-09 16:47:26

Servlet的Web

2012-03-20 09:20:40

Go語言

2012-06-11 09:37:41

2013-08-08 09:48:10

Web

2013-11-19 15:35:01

點贊
收藏

51CTO技術棧公眾號

亚洲日本va中文字幕| 在线看av的网址| 国产精品普通话对白| 亚洲精品视频免费| 一个色综合久久| 成人性生交大片免费看在线播放| 久久久亚洲午夜电影| 成人激情av在线| 日韩黄色在线视频| 日韩国产在线| 亚洲精品国产精品国自产在线| 国产三级国产精品国产专区50| 免费毛片在线看片免费丝瓜视频| 国产午夜亚洲精品午夜鲁丝片| 97久久精品午夜一区二区| 国产免费一区二区三区四区五区| 欧美激情1区2区3区| 一本久久综合亚洲鲁鲁| 久久久老熟女一区二区三区91| 99久久综合国产精品二区| 亚洲午夜免费电影| 一区二区三区视频| 国产一级片在线| 国产盗摄一区二区三区| 成人av色在线观看| 国产女主播喷水视频在线观看| 亚洲人成久久| 欧美人与物videos| 欧美日韩黄色网| 欧美色图在线播放| 亚洲国产精品久久久久秋霞不卡 | av中文在线资源库| 综合电影一区二区三区| 日韩福利影院| 男女视频在线观看| 97久久超碰精品国产| 97免费资源站| 99国产精品久久久久久久成人| 日韩高清一级片| 欧美中文字幕视频在线观看| 国产精品第九页| 欧美日一区二区在线观看 | 蜜臀av一级做a爰片久久| 欧洲成人在线视频| 丁香六月婷婷综合| 亚洲精品一级| wwwxxx黄色片| аⅴ天堂中文在线网| 精品三级在线观看视频| 日韩一区二区免费电影| 在线观看免费的av| 日韩精品免费观看视频| 在线免费观看视频一区| 成人黄色一区二区| av在线一区不卡| 欧美中文字幕久久| 日韩肉感妇bbwbbwbbw| av在线不卡精品| 欧美肥妇毛茸茸| 日韩av影视大全| 久久一级大片| 日韩美一区二区三区| 亚洲图片 自拍偷拍| 精品国产亚洲日本| 精品噜噜噜噜久久久久久久久试看| 一区二区在线免费观看视频| 白白在线精品| 亚洲精品一区av在线播放| 精品少妇一区二区三区免费观| 精品国产91| 北条麻妃一区二区三区中文字幕 | 自拍偷拍亚洲综合| 亚洲国产一二三精品无码| 国内高清免费在线视频| 欧美日韩在线观看视频| 欧美黄色性生活| 精品一区二区三区免费看| 精品久久久久av影院| 成人手机在线免费视频| 日韩夫妻性生活xx| 久久五月天综合| 国产女同在线观看| 日本在线不卡视频| 高清国产在线一区| 亚洲av成人精品毛片| 国产精品三级视频| 免费看欧美黑人毛片| 中文在线资源| 在线播放欧美女士性生活| 日本少妇xxxx软件| 欧美三级三级| 久久久久久久久91| 中文字幕 日韩有码| 成人一区在线看| 亚洲 国产 日韩 综合一区| 亚洲丝袜精品| 在线视频你懂得一区二区三区| 久久精品一二三四| 九九视频免费观看视频精品 | 欧洲av一区| 国产福利视频在线观看| 精品久久久久久中文字幕大豆网| 一本色道久久亚洲综合精品蜜桃| aiss精品大尺度系列| 中文字幕亚洲一区二区三区五十路 | 国产精品熟女久久久久久| av中文字幕在线不卡| 自拍偷拍一区二区三区| 成人性教育av免费网址| 精品国精品自拍自在线| www.99re6| 久久午夜激情| 国产精品高清一区二区三区| 日本在线免费中文字幕| 欧美午夜精品伦理| 秋霞午夜鲁丝一区二区| 成人一区不卡| 日本电影亚洲天堂| 亚洲欧美另类视频| 亚洲三级在线免费观看| 美女一区二区三区视频| 偷窥自拍亚洲色图精选| 欧美极品美女视频网站在线观看免费 | 亚洲麻豆一区| 亚洲最大福利视频网站| 蜜桃视频网站在线观看| 欧美性一级生活| 久久久久亚洲av成人无码电影| 99日韩精品| 国产成人精品免费视频大全最热 | 激情懂色av一区av二区av| 丰满少妇一区二区三区专区 | 黄色三级中文字幕| 成人自拍视频| 久久精品2019中文字幕| 中文字幕在线播放不卡| 日本一区二区三区四区| 性欧美极品xxxx欧美一区二区| 久久99精品久久久久久园产越南| 97在线视频国产| 污视频在线免费| 精品动漫一区二区三区| 日韩Av无码精品| 激情婷婷久久| 精品久久久久久一区| 国模精品视频| 亚洲精品视频在线观看视频| 日韩 国产 欧美| 日本一区二区三区在线不卡| 一区二区成人网| 国产精品久久久久无码av| 成人在线视频网站| 最近中文字幕免费mv2018在线| 欧美一区二区三区影视| 国产亚洲色婷婷久久99精品| 高清成人在线观看| 亚洲人成无码网站久久99热国产| 精品国产一区二区三区成人影院| 97视频com| 麻豆国产在线播放| 在线亚洲人成电影网站色www| 精品人妻一区二区三区四区| 蜜桃免费网站一区二区三区| 国产又爽又黄ai换脸| 日本一区二区三区视频在线看| 欧美激情综合色| 欧美777四色影视在线| 欧美在线观看视频一区二区| 熟女av一区二区| 成人爽a毛片一区二区免费| a级免费在线观看| 婷婷综合成人| 成人在线精品视频| 俄罗斯一级**毛片在线播放| 亚洲欧美日韩第一区| 一区二区三区播放| 亚洲亚洲人成综合网络| 精品无码人妻一区| 国产一区二区免费看| 青草青青在线视频| 欧美一区二区三区高清视频| 91九色国产视频| 少妇视频在线观看| 久久精品国产91精品亚洲| 人妻少妇精品无码专区| 在线观看av一区二区| 欧美成欧美va| 久久久不卡网国产精品二区 | 动漫3d精品一区二区三区乱码| 5252色成人免费视频| 日本成a人片在线观看| 亚洲福利视频在线| 国产又大又黄的视频| 亚洲成人www| 久久久久人妻一区精品色| 成人午夜私人影院| 亚洲免费看av| 亚洲欧美日韩国产一区| 国产麻豆电影在线观看| 羞羞答答一区二区| 97超碰在线播放| 不卡亚洲精品| 91av福利视频| 五月婷婷视频在线观看| 一区二区三区 在线观看视| 国产91麻豆视频| 欧美高清精品3d| 欧美日韩一级黄色片| 亚洲综合激情网| 成人午夜免费影院| 久久久噜噜噜久久中文字幕色伊伊| 一级黄色高清视频| 日本亚洲免费观看| 九九九九免费视频| 激情欧美日韩一区| 午夜久久久久久久久久久| 日韩国产综合| 日本免费高清一区二区| 国偷自产视频一区二区久| 91在线高清视频| 九七电影院97理论片久久tvb| 欧日韩在线观看| 激情黄产视频在线免费观看| 九九热精品视频国产| 久久久久久国产精品免费无遮挡| 一区二区三区天堂av| 天堂中文在线8| 亚洲国产精品久久久久秋霞不卡| www精品国产| 欧美一区二区精品久久911| 一级片视频免费| 欧美人牲a欧美精品| 国产精品高清无码| 在线免费观看成人短视频| 日韩精品久久久久久免费| 欧美色道久久88综合亚洲精品| 国产无遮挡aaa片爽爽| 亚洲主播在线播放| 免费中文字幕在线观看| 一区二区三区高清不卡| 欧美精品一区二区蜜桃| 一区二区久久久| 免费网站看av| 一区二区三区成人| 久久免费视频6| 亚洲午夜免费福利视频| 永久免费看片在线播放| 精品久久久视频| 一本一道无码中文字幕精品热| 欧美日韩一区二区精品| 国产主播第一页| 欧美四级电影在线观看| 91丨九色丨丰满| 日韩欧美国产麻豆| 色婷婷av一区二区三| 亚洲激情视频网站| 麻豆导航在线观看| 色吧影院999| 午夜av在线播放| 91高清免费视频| 韩国精品视频在线观看 | 窝窝社区一区二区| 欧美精品尤物在线| 久久国产中文字幕| 特级西西人体www高清大胆| 1024精品一区二区三区| av天堂永久资源网| 麻豆精品一区二区| 免费不卡av网站| 99r精品视频| 日韩不卡av在线| 亚洲精品免费播放| 国语对白永久免费| 欧美福利电影网| 香蕉久久一区二区三区| 中文字幕亚洲欧美日韩高清| 97caopor国产在线视频| 欧美一级视频一区二区| 欧洲亚洲精品久久久久| 国产伦精品一区二区三区免| 精品不卡一区| 欧美人与动牲交xxxxbbbb| 久久久精品性| av在线网站免费观看| 久久夜色精品国产噜噜av| 欧美视频一区二区在线| 欧美日韩国产综合新一区| 在线免费a视频| 亚洲国产欧美一区| 超碰人人在线| 日本成人在线视频网址| 我要色综合中文字幕| 日本精品免费| 在线日本高清免费不卡| 黄色手机在线视频| 99re这里只有精品视频首页| 肉色超薄丝袜脚交69xx图片| 一本色道久久综合狠狠躁的推荐| 国产美女精品视频国产| 亚洲欧洲一区二区三区在线观看| 中国av在线播放| 国产精品精品一区二区三区午夜版 | 亚洲第一在线综合在线| 亚洲第一在线| 三日本三级少妇三级99| 国产日韩欧美制服另类| 国产亚洲精品久久久久久无几年桃 | 一本一道久久a久久综合蜜桃| 91在线播放网址| 九九热精彩视频| 7777精品伊人久久久大香线蕉的 | 日本在线天堂| 国产精品久久不能| 日韩高清一级| 青青青在线视频播放| 国产综合色精品一区二区三区| 五月天综合视频| 日韩欧美国产骚| 人妻丰满熟妇av无码区hd| 久久国产精品电影| 亚洲伊人伊成久久人综合网| 日产国产精品精品a∨| 亚洲少妇一区| 亚洲欧美日韩偷拍| 亚洲一区二区三区不卡国产欧美| 国产精品无码AV| xvideos亚洲| 成人国产一区二区三区精品麻豆| 久久精品99| aa国产精品| 在线免费看黄色片| 亚洲午夜在线电影| 狠狠综合久久av一区二区| 欧美激情第1页| 亚洲精品v亚洲精品v日韩精品| 波多野结衣三级在线| 韩国精品一区二区| √天堂中文官网8在线| 91精品国产日韩91久久久久久| 精品孕妇一区二区三区| 成人精品一区二区三区电影免费 | 国产欧美精品一区二区三区四区| 日日骚av一区二区| 亚洲欧美中文另类| 小黄鸭精品aⅴ导航网站入口| 蜜桃久久精品乱码一区二区 | 久久久久久久久国产一区| 欧美大片久久久| 亚洲欧美日韩电影| 亚洲av综合色区无码一二三区 | k8久久久一区二区三区| 日韩网红少妇无码视频香港| 日韩成人黄色av| 欧美男体视频| 一区二区三区偷拍| 国产精品综合av一区二区国产馆| 青青草成人免费| 亚洲福利视频二区| 欧洲亚洲两性| 亚洲人体一区| 国产精品资源在线| 日韩乱码人妻无码中文字幕| 亚洲美女精品成人在线视频| 日本精品在线一区| 黄色www在线观看| 成人久久久精品乱码一区二区三区 | 欧美日韩调教| 亚洲精品在线视频免费观看| 欧美亚洲综合网| 成人短视频在线观看| 国产免费一区二区三区| 久久三级视频| 视频这里只有精品| 亚洲第一中文字幕| 国产精品久久亚洲不卡| 免费看日本黄色| 久久久精品国产免大香伊 | 欧洲亚洲精品| 97视频久久久| 国产精品天天摸av网| 亚洲经典一区二区三区| 国产不卡av在线免费观看| 亚洲a在线视频| 黑丝av在线播放| 欧美军同video69gay| 2018av在线| 亚洲午夜久久久影院伊人| 国产乱人伦精品一区二区在线观看| 日韩黄色精品视频| 久久久精品一区| 日韩美女国产精品| 91网址在线观看精品| 色婷婷综合久久久| 国内小视频在线看| 一区二区视频在线观看| 91在线码无精品| 国产夫妻性生活视频| 国产激情久久久久| 激情久久一区| 国产精品三区在线观看|