黄a在线观看-黄a在线-黄a大片-黄色片在线看-黄色毛片免费-黄色大片网站

您的位置:首頁技術文章
文章詳情頁

Java中的國際化,第二部分

瀏覽:8日期:2024-06-16 09:55:21
內容: 編者按:使你的Java程序能在本地小鎮甚至飄洋過海都運行良好,這面臨諸多的挑戰.我們已經在第三版中關于國際化探討的第一部分講述了Java國際化的前兩個步驟:使用Unicode字符集編碼,遵循當地使用習慣.接下來的時間,我們我們將繼續探討國際化的第三個步驟:本地化用戶可視信息.版權聲明:任何獲得Matrix授權的網站,轉載時請務必保留以下作者信息和鏈接作者:leniz原文:http://www.onjava.com/pub/a/onjava/excerpt/javaexIAN3_chap8/index1.html譯文:http://www.matrix.org.cn/resource/article/44/44207_Java+Internationalization.html關鍵字:Java;Internationalization本地化用戶可視信息國際化的第三個任務涉及到確保程序中用戶可視信息沒有被硬編碼(hardcode);相反的是,應該依據當地的俗成.在例8-3,字符Portfolio value,Symbol,Shares,和另外一些在程序中都是用英語進行硬編碼的,即使程序可能運行在遙遠的法蘭西國度.唯一避免這種尷尬處境的方法就是:你的程序必須支持在運行之時才實時地提取用戶可視的信息,并且這些信息需被實時地翻譯成各種語言.Java通過java.util包中的ResourceBundle 類來幫助我們完成這個任務.這個類包含了眾多可以通過名稱來查詢的資源.將你所希望等到本地化的地區的當地資源都定義到一個資源包中,運行之時Java將準確的加載本地化資源.通過加載正確的bundle,程序就可以實時的查找到對本地化支持所需要的資源(字符是比較有代表).使用Resource Bundles來處理資源為了定義一系列本地化的資源,你需要繼承ResourceBundle類生成一個類,并提供對handleGetObject()和getKeys()等方法的定義. 將資源的名稱傳給handleGetObject()方法,它將返回一個本地版本的資源.getKeys()返回的是一個Enumeration類型的類,它包含了ResourceBundle中已定義的所有的本地化資源的名稱.然而比直接繼承ResourceBundle類更為簡單的是繼承ListResourceBundle類.你可以簡潔地提供一個特性文件(參閱java.util.Properties),ResourceBundle.getBundle()方法將通過此文件生成一個PropertyResourceBundle實例.在一個程序中,為了能通過ResourceBundle類獲取本地化資源,你必須首先調用,一個靜態的getBundle()方法,這個方法將動態加載并實例化一個ResourceBundle,正如我們即將要涉及的一樣.返回的這個ResourceBundle包含了你所定義的資源名稱,并且是針對某一特定區域的(如果沒有區域被顯式的聲明,那么將加載默認的區域).一旦通過getBundle()方法獲取了你所要的ResourceBundle,你就可以通過getObject()方法以提供資源名稱的方式來獲取已本地化的資源.隨便提一下,你可以通過getString()方法更為便捷的把想要獲得的Object資源自動轉型為String類型.當調用getBundle()方法之時,指定你所希望的ResourceBundle的base name和你所期望的地點(如果你不希望使用默認的地點的話).獲取一個Locale用的是一個雙字的語言代碼,一個可選的雙字國家代碼,以及一個可選的字符變量.getBundle()方法通過把地區信息加上base name的方式,來獲取正確的本地ResourceBundle.查找一個合適的類的方法用的正是下面的算法:1.查詢一個具有下列名字的類 basename_language_country_variant 如果沒有發現這個類,或者沒有特別指定locale的字符變量,那么將進行下一步查詢2.查詢一個具有下列名字的類 basename_language_country 如果沒有發現這個類,或者沒有特別指定locale的國家編碼,那么將進行往下下一步的查詢3.查詢一個具有下列名字的類 basename_language 如果還是沒有發現這個類的話,那么將進行最后一步4.查詢一個與basename同名的類,換句話說,就是找一個與下列名字同名的類. basenam這里包含的是默認的本地資源包,針對的是所有沒有明確提供本地化的區域.在以上處理過程的每一步中,getBundle()都首先用給定的名字檢測一個類文件.如果沒有找到這個類文件,那么它將借助ClassLoader的getResourceAsStream()方法,通過給定的名字和.Properties后綴名去查找一個具有上述組合名稱的Properties文件.如果找到這樣的Properties文件的話,那么將通過這個文件提供的內容,實例化一個Properties Object,并通過getBundle()初始化,返回一個PropertyResourceBundle類,這個類借助ResourceBundle API導入Properties文件中的所有特性.如果上述的四種查詢的任何一個查詢,針對某特定區域的類或Properties文件都沒有被找到,那么它將重復上述的查詢,但查找的是針對默認區域的類或Properties文件. 默認區域的查詢仍然無法獲取合適的ResourceBundle,getBundle()方法將拋出一個MissingResourceException異常.任何一個ResourceBundle Object 都可以有一個特別針對自己的parent ResourceBundle. 當你在ResourceBundle中查找某個資源時,getObejct()首先在一個特定的bundle中查找,如果這個資源沒有在這個bundle中被定義,那么查找將回溯到父bundle中.因此,每一個ResourceBundle都是繼承了父類的資源,可能 覆寫了某些資源,有時甚至覆蓋了全部的(需要注意的是這里提到的術語繼承(inherit)和覆寫(override)區別與通常我們在討論class時所提到的針對父類的繼承和覆寫).上述的意思就是說,我們定義的ResourceBundle不一定非要定義你的應用程序所需要的每一個資源.比如你可能定義了一個專門針對法語用戶的信息ResourceBundle.而此時你希望有個專門針對加拿大的使用法語的用戶的ResourceBundle,你要做的就是覆寫一些信息來定義一個更為小型的而且更具有針對性的信息ResourceBundle.你的程序不需要去查找和建立它所使用的ResourceBundle的父對象.事實上getBundle()方法可以為了你自動的做這些工作.當getBundle()方法查找到一個符合上述要求的類或properties文件時,它卻不是立即返回它已查找到的ResourceBundle.相反的是,它會按照原先的步驟繼續尋找更為普遍性的類或Properties文件,而ResourceBundle可以通過這些來繼承資源.一旦getBundle()方法找到這個更具普遍性的資源bundle,它就會把這些資源組裝成最后的bundle的祖先.一旦確定了返回的最初的ResourceBundle的所有可能,它將創建之.為了繼續不久之前開始的那個例子,那個例子實際運行在魁北克,getBundle()可能首先查找一個不那么特殊的ResourceBundle類,這個類只包含了有限的特別針對魁北克的資源.接著,它查找更具一般的ResourceBundle類,這個類可能包含的是法國的信息.那么它把這個bundle作為剛剛提及的魁北克的最初的bundle的parent bundle. getBundle()最后查找的(可能發現的)是這樣一個類,它定義了一套默認的資源,有可能用的是英語(假設英語是開始的那些編程者的母語).這些bundle作為法語bundle的parent bundle(同時也就是魁北克bundle的爺字輩的bundle).當運用程序查找一個命名的資源之時,魁北克的bundle首先被查找到.如果這個命名資源沒有在此被定義,那么將查找法語的bundle,如果還是沒能找到所需要的資源,那么最后的可能就落在默認的bundle上了.ResourceBundle 舉例調試一些代碼有助于我們把上面討論的東西,理解的更加清晰,透徹.例8-4是一個生成Swing菜單的常規程序.面對給定一系列菜單的細目,它在資源bundle中查找針對這些細目的標簽和快捷鍵的資源,并創建一個本地化的菜單.下面的例子最后附有簡單的測試.圖8-3,是一個分別運行在美國,英格蘭和法國時創建的菜單欄程序.如果沒有那些提供菜單標簽本地化的resource bundle的存在,我們是不可能實現這個程序的. 圖 8-3 本地化菜單panes例8-4 SimpleMenu.javapackage je3.i18n;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.Locale;import java.util.ResourceBundle;import java.util.MissingResourceException;/** A convenience class to automatically create localized menu panes */public class SimpleMenu { /** The convenience method that creates menu panes */ public static JMenu create(ResourceBundle bundle, String menuname, String[] itemnames, ActionListener listener) { // Get the menu title from the bundle. Use name as default label. String menulabel; try { menulabel = bundle.getString(menuname + '.label'); } catch(MissingResourceException e) { menulabel = menuname; } // Create the menu pane. JMenu menu = new JMenu(menulabel); // For each named item in the menu. for(int i = 0; i < itemnames.length; i++) { // Look up the label for the item, using name as default. String itemlabel; try { itemlabel = bundle.getString(menuname+'.'+itemnames[i]+'.label'); } catch (MissingResourceException e) { itemlabel = itemnames[i]} JMenuItem item = new JMenuItem(itemlabel); // Look up an accelerator for the menu item try { String acceleratorText = bundle.getString(menuname+'.'+itemnames[i]+'.accelerator); //綠色為新加bundle.getString(menuname+'.'+itemnames[i]+'.accelerator');//這一行好像有問題. //應該是刪除此行,將上一行補充完整. item.setAccelerator(KeyStroke.getKeyStroke(acceleratorText)); } catch (MissingResourceException e) {} // Register an action listener and command for the item. if (listener != null) { item.addActionListener(listener); item.setActionCommand(itemnames[i]); } // Add the item to the menu. menu.add(item); } // Return the automatically created localized menu. return menu; } /** A simple test program for the above code */ public static void main(String[] args) { // Get the locale: default, or specified on command-line Locale locale; if (args.length == 2) locale = new Locale(args[0], args[1]); else locale = Locale.getDefault( ); // Get the resource bundle for that Locale. This will throw an // (unchecked) MissingResourceException if no bundle is found. ResourceBundle bundle = ResourceBundle.getBundle('com.davidflanagan.examples.i18n.Menus', locale); //注一 // Create a simple GUI window to display the menu with final JFrame f = new JFrame('SimpleMenu: ' + // Window title locale.getDisplayName(Locale.getDefault( ))); JMenuBar menubar = new JMenuBar( ); // Create a menubar. f.setJMenuBar(menubar); // Add menubar to window // Define an action listener that our menu will use. ActionListener listener = new ActionListener( ) { public void actionPerformed(ActionEvent e) { String s = e.getActionCommand( ); Component c = f.getContentPane( ); if (s.equals('red')) c.setBackground(Color.red); else if (s.equals('green')) c.setBackground(Color.green); else if (s.equals('blue')) c.setBackground(Color.blue); } }; // Now create a menu using our convenience routine with the resource // bundle and action listener we've created JMenu menu = SimpleMenu.create(bundle, 'colors', new String[] {'red', 'green', 'blue'}, listener); // Finally add the menu to the GUI, and pop it up menubar.add(menu); // Add the menu to the menubar f.setSize(300, 150); // Set the window size. f.setVisible(true); // Pop the window up. }}這個程序不是獨立的.它依賴資源bundle來做本地化菜單的工作.接下來,羅列了三份properties文件,這些文件是為例子中的資源bundle提供的.注意下面的這個列表包含了三個獨立的文件主體.(注二)# The file Menus.properties is the default 'Menus' resource bundle.# As an American programmer, I made my own locale the default.colors.label=Colorscolors.red.label=Redcolors.red.accelerator=alt Rcolors.green.label=Greencolors.green.accelerator=alt Gcolors.blue.label=Bluecolors.blue.accelerator=alt B# This is the file Menus_en_GB.properties. It is the resource bundle for# British English. Note that it overrides only a single resource definition# and simply inherits the rest from the default (American) bundle.colors.label=Colours# This is the file Menus_fr.properties. It is the resource bundle for all# French-speaking locales. It overrides most, but not all, of the resources# in the default bundle.colors.label=Couleurscolors.red.label=Rougecolors.green.label=Vertcolors.green.accelerator=control shift Vcolors.blue.label=Bleu格式化信息我們已經看到,為了實現程序的國際化,必須把所有用戶可見的信息都放到資源bundle中.當這些文本的本地化只是包含一些象按鍵和菜單欄文本的簡單標簽,那么一切都顯得很直觀.然而,面對的是一部分靜態內容和一部分動態內容的組合體,情況就變得微妙了.比如編譯器可能要顯示一條這樣的信息,Error at line 5 of file “Hello.java,在這種情況下,行數和文件名是動態的,而且是區域獨立的,其余的信息都是靜態的即需要被簡單地本地化操作的.java.text 包中的MessageFormat類,可以幫助我們有效的解決這個難題.為了使用它們,我們只把那些靜態的文字部分儲存在ResourceBundle中,對于那些動態的信息部分中出現的特殊字符也必須被安置好.比如,某個資源bundle包含下面的一條信息Error at line{0} of file {1}.另一個資源bundle可能包含的是一個已被翻譯的Erreur:{1}:{0}的信息.為了使用對付這樣的本地化信息問題,我們從靜態信息中創建一個MessageFormat,然后調用它的format()方法.對隊列中的值進行替換.在這種情況下,這個隊列中包含一個用于行數的Integer 對象和一個用于文件名的String對象MessageFormat對象可以和java.text包中的其它Format類進行通信.它創建和使用NumberFormat對象來格式化數字并使用DateFormat對象格式化日期和時間.另外,可以設計信息,用這些信息創建一個ChoiceFormat對象,以此實現從數字形式到字符形式的轉變.當操作計數值類型時,這些顯得尤其有用,例如對應月份名稱的數字,或當你需要根據數字值的多少來決定某個詞的單數或復數.例8-5 演示了這種MessageFormat的使用.這是一個很方便的類,有一個單獨的靜態方法用于本地化顯示異常信息或錯誤信息.但調用的時候,代碼試圖加載一個名為Errors的ResourceBundle.當找到了這個類,那么它將查詢使用了傳遞過來的異常對象名字的信息資源.如果這個信息資源也被找到,它將顯示這個信息.擁有五個值的隊列被傳遞給format()方法.本地化了的錯誤提示信息可以包括任何一個或是全部這些參數.例子中定義的LocalizedError.display()方法,曾經在本章開始的例8-2中使用過.與此例配合使用的默認Errors.Properties資源bundle, 在代碼后面也有相應提供.應用程序的錯誤信息提示在這里得到了很好的國際化.將一個應用程序的錯誤信息提示應用到一個新的區域中,所要做的無法只是轉化(本地化)Errors.Properties文件.Example 8-5. LocalizedError.javapackage je3.i18n;import java.text.*;import java.io.*;import java.util.*;/** * A convenience class that can display a localized exception message * depending on the class of the exception. It uses a MessageFormat, * and passes five arguments that the localized message may include: * {0}: the message included in the exception or error. * {1}: the full class name of the exception or error. * {2}: the file the exception occurred in * {3}: a line number in that file. * {4}: the current date and time. * Messages are looked up in a ResourceBundle with the basename * 'Errors', using a the full class name of the exception object as * the resource name. If no resource is found for a given exception * class, the superclasses are checked. **/public class LocalizedError { public static void display(Throwable error) { ResourceBundle bundle; // Try to get the resource bundle. // If none, print the error in a nonlocalized way. try { String bundleName = 'com.davidflanagan.examples.i18n.Errors'; bundle = ResourceBundle.getBundle(bundleName); } catch (MissingResourceException e) { error.printStackTrace(System.err); return; } // Look up a localized message resource in that bundle, using the // classname of the error (or its superclasses) as the resource name. // If no resource was found, display the error without localization. String message = null; Class c = error.getClass( ); while((message == null) && (c != Object.class)) { try { message = bundle.getString(c.getName( )); } catch (MissingResourceException e) { c = c.getSuperclass( ); } } if (message == null) { error.printStackTrace(System.err); return; } // Get the filename and linenumber for the exception // In Java 1.4, this is easy, but in prior releases, we had to try // parsing the output Throwable.printStackTrace( ); StackTraceElement frame = error.getStackTrace( )[0]// Java 1.4 String filename = frame.getFileName( ); int linenum = frame.getLineNumber( ); // Set up an array of arguments to use with the message String errmsg = error.getMessage( ); Object[ ] args = { ((errmsg!= null)?errmsg:''), error.getClass( ).getName( ), filename, new Integer(linenum), new Date( ) }; // Finally, display the localized error message, using // MessageFormat.format( ) to substitute the arguments into the message. System.err.println(MessageFormat.format(message, args)); } /** * This is a simple test program that demonstrates the display( ) method. * You can use it to generate and display a FileNotFoundException or an * ArrayIndexOutOfBoundsException **/ public static void main(String[ ] args) { try { FileReader in = new FileReader(args[0]); } catch(Exception e) { LocalizedError.display(e); } }}下面羅列的是資源bundle需要的properties文件,這些文件用于本地化由例8-2的ConvertEncoding所產生的錯誤信息.## This is the file Errors.properties# One property for each class of exceptions that our program might# report. Note the use of backslashes to continue long lines onto the# next. Also note the use of n and t for newlines and tabs#java.io.FileNotFoundException: Error: File '{0}' not foundntError occurred at line {3} of file '{2}'ntat {4}java.io.UnsupportedEncodingException: Error: Specified encoding not supportedntError occurred at line {3} of file '{2}'ntat {4,time} on {4,date}java.io.CharConversionException:Error: Character conversion failure. Input data is not in specified format.# A generic resource. Display a message for any error or exception that# is not handled by a more specific resource.java.lang.Throwable:Error: {1}: {0}ntError occurred at line {3} of file '{2}'nt{4,time,long} {4,date,long}當我們擁有這樣一個resource bundle后, ConvertEncoding 將會產生類似下面的 error messages:Error: File 'myfile (No such file or directory)' not found Error occurred at line 64 of file 'FileInputStream.java' at 7/9/00 9:28 PM或者,如果是在法國的話:Error: File 'myfile (Aucun fichier ou repertoire de ce type)' not found Error occurred at line 64 of file 'FileInputStream.java' at 09/07/00 21:28練習 8-1一些用于國際化的類,例如NumberFormat,DateFormat等,都有一個靜態的方法getAvailableLocales(),這個方法返回一系列他們所支持的本地化對象.你可以在一個給定的本地化對象中,通過getDisplayCountry()方法來獲取這個給定區域的國家名稱.這個方法有兩種方式.一種是不帶參數的,返回顯示的是默認地的國家名稱.另一種是需要提供一個Locale作為參數,返回的是特定區域語言下的國家名稱.寫一個程序,這個程序通過NumberFormat.getAvaileLocales()方法可以顯示所有區域的國家名稱.使用Locale定義的靜態locale常量,用英語,法語,德語,意大利語分別顯示每一個國家的名稱. 附錄:注一:這里的com.davidflanagan.examples.i18n是放置了幾個properties文件的package名,如果你將附帶的properties放到其它的package中,請做相應的變動.Menus是默認的名稱注二:分別保存到三個獨立的文本文件中,用注釋中的名字進行命名,以此為針對中國用戶的菜單可以是:文件四: Menus_zh.propertiescolors.label=顏色設置colors.red.label=紅色colors.red.accelerator=alt Rcolors.green.label=綠色colors.green.accelerator=alt Gcolors.blue.label=藍色colors.blue.accelerator=alt B如果出現中文字符亂碼問題,請將加入下列方法,對菜單字符進行轉換,所以這里也要多考慮一下字符集的問題/*** @todo傳入一個以UTF-8編碼的字符,輸出UTF-16編碼的中文* @ param inputStr String 需要轉換的字串*/public static String getChineseOut(String inputStr){ try{ String temp_s = inputStr; byte[] temp_b = null; temp_b = temp_s.getBytes('ISO8859-1'); String result = new String(temp_b); return result; } catch(Exception e){ e.printStackTrace(); return inputStr; } } Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd 編者按:使你的Java程序能在本地小鎮甚至飄洋過海都運行良好,這面臨諸多的挑戰.我們已經在第三版中關于國際化探討的第一部分講述了Java國際化的前兩個步驟:使用Unicode字符集編碼,遵?
標簽: Java
相關文章:
主站蜘蛛池模板: 国产精品久久久久久人妻精品动漫 | 国产精品96久久久久久 | 亚洲美女性生活 | 亚洲国产亚洲 | 日韩va| 黄色片在线视频 | 夜夜操夜夜摸 | 日韩在线视频免费观看 | 欧美人与禽猛交狂配1 | 搡国产老太xxx网站 搡老女人一区二区三区视频tv | 无码任你躁久久久久久 | 日本手机在线视频 | 精品国模一区二区三区 | 男女啪啪做爰高潮无遮挡 | 亚洲码国产精品高潮在线 | 99欧美精品| 一本大道久久a久久精品综合1 | 麻麻张开腿让我爽了一夜 | 亚洲精品资源在线 | bt7086福利一区国产 | 国产乱性 | 天天摸天天舔 | 欧美乱妇高清无乱码一级特黄 | 成人美女黄网站色大免费的 | 久久久亚洲精品一区二区三区 | 欧美视频在线观看免费 | 免费看a| 亚洲欧美日韩国产手机在线 | 69堂国产成人免费视频 | 看久久 | 久一在线视频 | 九九99九九精彩6 | 午夜精品视频在线 | 日本免费一区二区三区视频观看 | 40到50岁中老年妇女毛片 | 国产精品乱子伦 | 超碰综合在线 | 老司机成人免费视频 | 少妇av射精精品蜜桃专区 | 99久久精品国产91久久久 | 欧美激情校园春色 | av在线进入 | 在线欧美日韩 | 天天干视频网站 | 1000部拍拍拍18勿入免费视频下载 | 国产精彩视频在线观看 | 国产精品一二三四 | 亚洲国产婷婷香蕉久久久久久 | 日本中出中文字幕 | 极品国产在线 | 亚洲精品在线观 | 污网在线看 | 丰满少妇在线观看bd | 国产成人精品在线 | 720lu国产刺激无码 | 国产伦精品| 中文毛片无遮挡高潮免费 | 爆操无毛白虎 | 偷拍中年夫妇激情嗷嗷叫 | 韩日免费av | 国产亚洲papapa | 男人视频网站 | 东京无码熟妇人妻av在线网址 | 欧美大片免费 | 久久中文字幕一区二区 | 久久久夜色精品亚洲 | 午夜视频在线播放 | 日本三级大全 | 亚洲国产成人久久综合电影 | 亚洲欧美强伦一区二区 | 人人妻人人玩人人澡人人爽 | 99国产精品国产精品九九 | 中国免费黄色 | xxxx日本免费 | 久久久久国产精 | 国产欧美做爰xxxⅹ在线观看 | 国产福利网站 | 久久一本久综合久久爱 | 风间由美一二三区av片 | 特级特黄aaaa免费看 | 一级特级毛片 | 亚洲欧美日韩成人一区 | 国产中文字幕av | 国产视频一区二区三区四区五区 | 日韩精品无码一区二区三区不卡 | 亚洲区欧美区综合区自拍区 | 日本少妇高潮喷水视频 | 亚洲欧美成人精品香蕉网 | av在线一区二区三区 | 国产亚洲一区二区三区四区 | 国产精品自拍第一页 | 国模大尺度一区二区三区 | av动漫天堂 | 免费日韩视频 | 久久久久久五月天 | 日本激情一区二区 | 国产美女免费观看 | 熟妇女人妻丰满少妇中文字幕 | 粉嫩av在线播放 | 极品少妇啪啪高清免费 | 奇米av在线 | 一级国产精品一级国产精品片 | 九色porny丨入口在线 | 国产黄色高清 | 你懂的欧美| 欧美亚洲一区二区三区四区 | 黄色网址国产 | 国产欧美精品一区二区色综合 | 激情五月激情综合 | 日本猛少妇色xxxxx猛交图片 | 寡妇疯狂性猛交 | 国产精品99久久久久久久久 | 97视频在线免费 | 久9re热视频这里只有精品 | 人妻少妇边接电话边娇喘 | sm免费人成虐网站 | 女人和拘做爰正片视频 | 欧美精品一级在线观看 | 国产一级做a | 欧美风情第一页 | 公侵犯一区二区三区四区中文字幕 | 青青欧美 | 手机在线免费观看av片 | 乱色精品无码一区二区国产盗 | 久久肉色丝袜脚交 | 精品国产一区二区三区久久久狼 | 人与拘一级a毛片 | 天天色综合1 | 狠狠色噜噜狠狠狠狠色综合久av | 好吊视频一区二区三区 | 欧日韩视频| 欧美高清a | 国产精品黄色大片 | 午夜免费观看视频 | 男人天堂avav | 50一60岁老妇女毛片 | 欧美成人一区二区三区 | 精品国产乱码久久久久久1区2区 | 少妇出轨乱人伦 | 亚洲天堂第一 | 国产一区二区视频免费 | 精品无码国产一区二区三区51安 | 亚洲一级二级片 | 日本添下边视频全过程 | 国产一区二区三区无码免费 | 一区二区三区欧美在线观看 | 国产精品女主播一区二区三区 | 国产精品亚州 | 免费无码鲁丝片一区二区 | 中文字幕十一区 | 无码人妻一区二区三区免费视频 | 欧美日韩八区 | 久久久久伊人 | 国产一区二区三区黄 | 欧美xx在线 | 关秀媚三级露全乳视频 | 欧美日韩亚洲综合 | ass嫩粉嫩粉嫩pⅰcs | 国产高清www | 日韩精品黄 | 91美女图片黄在线观看 | 久久久久久久成人 | 国产成人观看 | 五月天丁香在线 | 大胸美女被吃奶爽死视频 | 在线观看麻豆av | 3d成人动漫在线观看 | 午夜精品福利视频 | 中文国产在线观看 | 日韩 欧美 亚洲 | 久久精品国产精品亚洲艾草网 | 欧美日韩观看 | 亚洲视频在线一区二区 | 高柳家在线观看 | 天天爽夜夜爽夜夜爽 | 国产公妇伦在线观看 | 丁香六月激情综合 | 99热这里是精品 | 狠狠搞av | 女超人h版av在线看 女儿的朋友4在线观看 | 九热精品视频 | 亚洲色欲色欲www在线观看 | 996热re视频精品视频这里 | 免费毛儿一区二区十八岁 | 麻豆精品乱码一二三区别蜜臀在线 | 国产精品偷伦视频免费手机播放 | 国产一级视频在线 | aaa一区二区| 久久久久久国产精品高清 | 久久中出| 国产伦精品一区二区三区精品视频 | 91亚洲精品久久久 | 色欧洲| 国产农村乱对白刺激视频 | 国产无遮挡无码视频免费软件 | 国产丝袜调教 | 精品无码黑人又粗又大又长 | 国产精品久久久久久久久久久久午夜 | 久久亚洲精精品中文字幕早川悠里 | 欧美黄色影院 | 中文字幕日韩精品在线观看 | wwwxxx亚洲| 欧美精品与黑人又粗又长 | 日韩精品视频一区二区三区 | 成人美女毛片 | 日韩在线观看视频网站 | 午夜亚洲一区 | 色香蕉视频 | 国产精品一区二区三区四 | 巨胸喷奶水www久久久免费动漫 | 8x成人66m免费视频 | 中国国产精品 | 中文字幕一区二区三区波野结 | 日韩免费视频在线观看 | av成人在线播放 | 成色网| ririsao久久精品一区 | 久久99热人妻偷产国产 | 1v1高辣巨肉h各种play | 按摩师高h荡肉呻吟在线观看 | 免费在线观看av网址 | 九九在线免费视频 | 国产不卡视频一区二区三区 | 亚洲高清在线视频 | 国产精品igao视频网 | 少妇坐莲好爽91 | 91青草视频 | 97久久人人超碰caoprom欧美 | 永久免费观看美女裸体的网站 | 高潮的毛片激情久久精品 | 女十八免费毛片视频 | 亚洲品牌自拍一品区9 | 欧美第三页 | 欧美又大粗又爽又黄大片视频 | 九九久久在线看 | 亚洲精品视频播放 | 国产欧美精品日韩区二区麻豆天美 | 一级做a爱视频 | 亚洲精品97| av免费观看网站 | 欧美最猛性xxxxx免费 | 影视av久久久噜噜噜噜噜三级 | 噜妇插内射精品 | 4455成人免费观看 | 国产欧美一级二级三级在线视频 | 亚洲成年人网 | 日日躁夜夜摸月月添添添 | 在线观看视频99 | 亚洲美女中文字幕 | 欧美爱爱网 | 成人激情开心 | 国产乱人乱精一区二视频国产精品 | 亚洲乱论 | 大伊人狠狠躁夜夜躁av一区 | 337p粉嫩大胆色噜噜噜噜 | 亚洲精品视频在线观看免费 | 成人性色生活片 | 国产美女无遮挡永久免费 | 亚洲最大成人在线视频 | 亚洲天堂日韩在线 | 一本一生久久a久久精品综合蜜 | 日韩精品一区在线观看 | 日韩精品一卡2卡3卡4卡乱码的功能 | 性高朝久久久久久久3小时 av片在线观看 | 乌克兰少妇videos高潮 | aa黄色片| 日韩激情一区二区 | 日韩av网站在线播放 | 亚洲欧美成人一区二区在线电影 | 国内激情 | 香港三级精品三级在线专区 | 国产情侣偷国语对白 | 国产精品区二区三区日本 | 巨胸不知火舞露双奶头无遮挡 | 黄色中文字幕 | 国产刚发育娇小性色xxxxx | 久久久久久香蕉 | 久久先锋 | 九九99九九精彩3 | 乱亲女秽乱长久久久 | 无码中文字幕在线播放2 | 欧美日韩中文国产一区 | 无码人妻精品一区二区三区99不卡 | 50岁退休熟女露脸高潮 | 成人免费午夜视频69影院 | 久久久精品成人免费观看 | 五月天丁香久久 | www操操操| 久久一卡二卡 | 日本丰满熟妇videos | 日本欧美一区二区三区在线播放 | 黑人粗硬进入过程视频 | av久久天堂三区 | 国产亚洲成av片在线观看 | 四虎4545www精品视频 | 爱射综合 | 亚洲午夜1000理论片aa | 日韩专区欧美专区 | 五十路熟女丰满大屁股 | 欧美三级视频在线播放 | 尤物99国产成人精品视频 | 欧美精品高清 | 久久99精品久久久秒播 | 在线观看吃瓜av网站 | 国产精品天天看 | 九九久久99| 乱人伦人妻中文字幕无码 | 久久久综合亚洲91久久98 | 香蕉视频免费在线播放 | 黄色片一级毛片 | 性色在线观看 | 制服 丝袜 综合 日韩 欧美 | 国产精选第一页 | 精品一区二区在线播放 | 99久久人妻无码精品系列 | 欧美日韩精品区别 | 少妇又紧又色又爽又刺激视频 | 日本美女逼 | 国产亚洲精品美女久久久 | 99精品一区二区 | 男受被做哭激烈娇喘gv视频 | hodv一21134铃原爱蜜莉在线 | 国产永久免费视频 | 在线欧美精品一区二区三区 | 中文字幕在线网站 | 亚洲再线 | 久久九九精品 | 99在线观看精品 | 国产精品久久久对白 | 成人福利一区 | 国产高清精品一区二区三区 | 肉体肉体xxx肉体d久久 | 国产欧美一区二区精品忘忧草 | 又粗又硬又猛又黄网站在线观看高清观看视频 | 中国美女囗交视频免费看 | 伊人精品无码av一区二区三区 | 久久久精品动漫 | 少妇高潮一区二区三区99女老板 | 欧美性猛交ⅹxxx乱大交妖精 | 午夜激情综合 | 成人午夜免费毛片 | 久久亚洲日韩精品一区二区三区 | 日本不卡一区二区在线观看 | 精品久久久久久人妻无码中文字幕 | 丰满岳乱妇一区二区三区 | ts 人妖 另类 在线 | 文中字幕一区二区三区视频播放 | 日本一级特黄高潮 | 国产农村妇女毛片精品久久 | 男女作爱免费网站 | 亚洲中文字幕无码专区 | 中文亚洲欧美日韩无线码 | 亚洲国产成人久久精品大牛影视 | 超碰国产91 | 中文字幕精品在线视频 | 特黄av| 国产精选在线观看 | 免费观看交性大片 | 波多野结衣高清在线 | 日本久久综合 | 国产精品国产三级国产aⅴ无密码 | 久草在线视频在线观看 | 福利在线免费观看 | 亚洲a∨无码一区二区三区 国产乱子伦精品免费女 | 久久久人 | 久久久婷婷五月亚洲97号色 | 亚洲欧美视频 | 亚州福利 | 熟妇人妻va精品中文字幕 | 日本久久精品一区二区三区 | 国产人妻鲁鲁一区二区 | 国产精品女优 | 国产精品久久天堂噜噜噜 | 成av人在线观看 | 中文字幕无码免费久久9一区9 | 欧美a∨亚洲欧美亚洲 | 无码gogo大胆啪啪艺术 | 午夜精品久久久久久久久 | 日本绝伦老头与少妇在线观看 | 久久99精品久久久大学生 | a v在线视频| 国产日韩一区二区三区 | 欧美色图国产精品 | 人妻少妇精品中文字幕av | 国产亚洲精品久久久久久无几年桃 | 天堂网ww | 欧美丰满熟妇xxxxx | 久久精品天天中文字幕人妻 | 欧美人与性动交0欧美精一级 | 玩丰满熟妇xxxx视频 | 一本色综合亚洲精品88 | 亚洲老妇交性506070 | 日韩少妇av | 超碰在线97国产 | 精品国产一区二区三区忘忧草 | 伊人网一区二区 | 国产精品福利在线 | 国产精品久久久久久免费免熟 | 日韩一级片 | 精品国产一区二区三区免费 | 欧美成人三级在线 | 精品国产97| 日日干干 | 手机在线一区二区 | 巨大乳沟h晃动双性总受视频一区 | 少妇啊灬啊别停灬用力啊房东 | 日韩免费久久 | 久久日韩乱码一二三四区别 | 免费看国产一级片 | 中文字幕欧美视频 | 把jiji进美女的屁屁里视频 | 99青青草| 一本一道久久a久久精品综合 | 久久国产色 | 91欧美日韩 | 国产精品精品久久久久久 | 欧洲男女裸体无遮挡做爰 | 北条麻妃在线一区二区 | 2000xxx亚洲精品 | 成人免费xxxxxx视频 | 韩日三级视频 | 欧美激情在线观看 | 国产猛男猛女超爽免费视频网站 | 免费国产一级 | 欧美激情综合五月色丁香 | 成人午夜av在线 | 国产视频69 | 欧美伦理一区 | 新毛片基地 | 亚洲风情第一页 | 成人h片在线观看 | 日韩中文字幕精品视频 | 美女黄网站人色视频免费国产 | 干一夜综合 | 看久久 | 图片区小说区另类春色 | 精品国产福利一区二区 | 久久久久人妻一区精品色欧美 | 精品久久综合1区2区3区激情 | 国产国拍亚洲精品av | 成年人免费在线视频 | 狠狠躁夜夜躁人人躁婷婷视频 | 精品国产欧美一区二区三区成人 | 亚洲人的天堂 | 亚洲第一免费播放区 | 精品乱人伦一区二区三区 | 久草a在线 | 美女露胸无遮挡 | 久久密| 91视频 -- 69xx| 一级一片免费看 | 久久这里有精品 | 国内少妇偷人精品免费 | 色婷婷成人网 | 国产肉体xxxx裸体784大胆 | 91超碰在| 国产91丝袜在线播放0 | 免费的又色又爽又黄的片捆绑美女 | 欧美一级黄色片在线观看 | 国内视频自拍 | 99re66热这里只有精品8 | 亚洲国产97色在线张津瑜 | 亚洲精品久久久久中文字幕m男 | 8x8ⅹ国产精品一区二区二区 | 色翁荡熄又大又硬又粗又视频 | 男女啪啪免费 | 性欧美videos高清精品 | 深夜爽爽动态图无遮无挡 | 黑人玩弄出轨人妻松雪 | 欧美综合自拍亚洲综合图片区 | a男人天堂| 一本久久久久 | 北条麻妃在线一区二区韩世雅 | 国产精品一区二区在线播放 | 和岳每晚弄的高潮嗷嗷叫视频 | 精品一卡二卡三卡四卡 | 欧美三级在线观看视频 | 婷婷丁香九月 | 美女网站在线永久免费观看 | 香港a级毛片| 色吊丝中文字幕 | 免费看a的网站 | h在线播放| 91国内精品久久久 | 亚洲国产精品久久久久秋霞 | 亚洲一区二区三区无码国产 | 伊人性视频 | 久久伊人免费 | 日韩毛片免费在线观看 | 中文字幕欧美激情 | 国产精品入口麻豆九色 | 国产一区二区在线播放视频 | 88国产精品视频一区二区三区 | 久草福利在线观看 | 国产jjizz女人多水喷水 | 亚洲一区二区三区乱码aⅴ蜜桃女 | 精品国产av色一区二区深夜久久 | youjizzcom自拍 | 啦啦啦中文在线观看日本 | 台湾午夜a级理论片在线播放 | 久久午夜伦鲁片免费无码 | 超碰在线图片 | juliaann精品艳妇在线 | 在线观看av片 | 精品亚洲国产成人av制服丝袜 | 成人在线视屏 | 美丽肉奴隷1986在线观看 | 黄网站永久免费 | 妇与子乱肉肉在线观看 | 久久成年网 | 91麻豆精产国品一二三产区区 | 五月婷婷在线视频观看 | 美女久久久久久 | 少妇人妻av无码专区 | 18禁裸体女免费观看 | 久久人妻无码中文字幕 | 久久高潮视频 | 日本韩国欧美 | a猛片免在新观看 | 精品国产乱码久久久久久郑州公司 | xxxxxx欧美| 国产片在线 | 久久久久不卡 | 欧美 日韩 亚洲 在线 | 欧美日韩在线播放三区四区 | 理论片亚洲| 天堂va欧美va亚洲va老司机 | 一级黄色在线观看 | 国产又猛又黄又爽 | 91看片网 | 精久国产av一区二区三区孕妇 | 免费网站观看www在线观看 | 自偷自拍亚洲 | 久久国产精品首页 | 亚洲日韩av无码一区二区三区人 | 三级伦理精品专区 | 国产aⅴ激情无码久久久无码 | 国产精品日 | 欧美特级特黄aaaaaa在线看 | 国产乱人伦精品一区二区 | 少妇又紧又爽又黄的视频 | 国产美女特级嫩嫩嫩bbb片 | 天堂网国产 | 国产伦精品一区二区三区免 | 女人爽到高潮的免费视频 | 熟女人妻一区二区三区免费看 | 中文字幕激情小说 | 中国一级免费毛片 | 免费无码毛片一区二三区 | 欧美 日韩 人妻 高清 中文 | 全村肉体暴力强伦轩np小说 | 天堂网在线中文 | 无码东京热一区二区三区 | 久久久久国产一区二区 | xxxx色 | 欧美高清在线一区 | 欧美日本国产 | 人成在线免费视频 | 一级性毛片 | 极品久久久 | 精品无码人妻一区二区三区不卡 | 黄色片国产 | 亚洲第9页 | xxnn成人免费视频 | 成人性生交大全免费中文版 | 亚洲综合在线另类色区奇米 | 国产一线二线在线观看 | 亚洲第一成年免费网站 | 九九激情视频 | 精品一区久久 | 美女视频一区二区 | 激情内射亚洲一区二区三区 | 人妻中文字幕av无码专区 | 91精品国产aⅴ一区 91精品国产爱久久丝袜脚 | 狠狠躁夜夜躁人人爽天天天天97 | 极品少妇xxxx精品少妇偷拍 | 91自产国偷拍在线 | 不卡视频一区二区三区 | 午夜视频在线瓜伦 | 日本大片在线播放在线软件功能 | 五月天综合激情网 | 成人xxx| 最新天堂资源在线 | 免费涩涩18网站入口 | 亚洲国产精品久久久天堂不卡 | av高清| 亚色在线视频 | 色猫咪免费人成网站在线观看 | 成人一二三区 | 亚洲视频手机在线 | 国产精品三级视频 | 成人亚洲视频 | 少妇又紧又爽又黄的视频 | 天堂中文在线资源 | 9久久精品| 夜夜嗨一区二区三区 | 国产色视频网站免费 | 黄色录像a | 国外亚洲成av人片在线观看 | 夜夜高潮夜夜爽精品视频 | 夜夜精品浪潮av一区二区三区 | 99re6热在线精品视频播放 | 大尺度h1v1高h引诱 | 谁有免费的黄色网址 | 美女视频黄a视频免费全程软件 | 精品国产乱码一区二区三区 | 999一区二区三区 | 中文字幕二十三页2 | fc2成人免费人成在线观看播放 | 国产偷亚洲偷欧美偷精品 | 可以看污的网站 | 五月花成人网 | 成年人视频在线免费看 | 亚洲国产日韩a在线播放 | 国产suv精品一区二区33 |