iOS語(yǔ)言本地化/國(guó)際化

原文鏈接

前言

語(yǔ)言本地化,又叫做語(yǔ)言國(guó)際化。是指根據(jù)用戶(hù)操作系統(tǒng)的語(yǔ)言設(shè)置,自動(dòng)將應(yīng)用程序的語(yǔ)言設(shè)置為和用戶(hù)操作系統(tǒng)語(yǔ)言一致的語(yǔ)言。往往一些應(yīng)用程序需要提供給多個(gè)國(guó)家的人群使用,或者一個(gè)國(guó)家有多種語(yǔ)言,這就要求應(yīng)用程序所展示的文字、圖片等信息,能夠讓講不同語(yǔ)言的用戶(hù)讀懂、看懂。進(jìn)而提出為同一個(gè)應(yīng)用程序適配多種語(yǔ)言,也即是國(guó)際化。語(yǔ)言國(guó)際化之所以又叫做語(yǔ)言本地化,這是站在每個(gè)用戶(hù)的角度而言的,是指能夠讓用戶(hù)本地、本土人群能夠看懂的語(yǔ)言信息,顧名思義,語(yǔ)言本地化。其實(shí)語(yǔ)言本地化 == 語(yǔ)言國(guó)際化!

本文將分如下7個(gè)主要章節(jié)一步一步講解如何完全本地化一個(gè)App。

配置需要國(guó)際化的語(yǔ)言(國(guó)際化的準(zhǔn)備工作)

App名稱(chēng)本地化

代碼中字符串本地化

多人開(kāi)發(fā)情況下的字符串本地化

圖片本地化(兩種方式兩種方式)

查看/切換本地語(yǔ)言

storyboard/xib本地化

配置需要國(guó)際化的語(yǔ)言

配置需要國(guó)際化的語(yǔ)言,這也是國(guó)際化之前的準(zhǔn)備工作,無(wú)論我們是國(guó)際化App名稱(chēng)、代碼中的字符串、圖片、還是storyboard和xib,都需要進(jìn)行這一步的準(zhǔn)備工作(一個(gè)項(xiàng)目中需要且僅需要配置一次)。

選中project->Info->Localizations,然后點(diǎn)擊"+",添加需要國(guó)際化/本地化的語(yǔ)言,如下圖(默認(rèn)需要勾選Use Base Internationalization):

Snip20160616_15.png

此處以添加法語(yǔ)為例,如下圖:

Snip20160616_18.png

彈出如下對(duì)話(huà)框,直接點(diǎn)擊finish,如下圖:

Snip20160616_21.png

同理,添加簡(jiǎn)體中文、繁體中文、韓語(yǔ),最終結(jié)果如下圖:

Snip20160616_22.png

備注:“zh-Hans”和“zh-Hant”是簡(jiǎn)體中文和繁體中文的縮寫(xiě)。這是標(biāo)準(zhǔn)的縮寫(xiě)。H可大寫(xiě)也可小寫(xiě)。"en"是英語(yǔ)的縮寫(xiě)。ko是韓語(yǔ)的縮寫(xiě),fr是法語(yǔ)的縮寫(xiě)。其他語(yǔ)言請(qǐng)百度各國(guó)語(yǔ)言縮寫(xiě)即可查詢(xún)。

(一)應(yīng)用名稱(chēng)本地化/國(guó)際化

應(yīng)用名稱(chēng)本地化,是指同一個(gè)App的名稱(chēng),在不同的語(yǔ)言環(huán)境下(也就是手機(jī)設(shè)備的語(yǔ)言設(shè)置)顯示不同的名稱(chēng)。比如,微信在簡(jiǎn)體中文環(huán)境下App名稱(chēng)顯示為“微信”,在英語(yǔ)環(huán)境下顯示為“weChat”。下面就開(kāi)始進(jìn)行應(yīng)用名稱(chēng)本地化。

選中Info.plist,按下鍵盤(pán)上的command + N,選擇Strings File(iOS->Resource->Strings File)

Snip20160616_10.png

文件名字命名為InfoPlist,且必須是這個(gè)名字(因每個(gè)人電腦設(shè)置差異,此處本人電腦沒(méi)有顯示strings后綴名):

Snip20160616_11.png

點(diǎn)擊create后,Xcode左側(cè)導(dǎo)航列表就會(huì)出現(xiàn)名為InfoPlist.strings的文件,如下圖:

Snip20160616_13.png

選中InfoPlist.strings,在Xcode的File inspection(Xcode右側(cè)文件檢查器)中點(diǎn)擊Localize,目的是選擇我們需要本地化的語(yǔ)言,如下圖:

注意:在點(diǎn)擊Localize之前,一定要保證我們已經(jīng)添加了需要本地化的語(yǔ)言,也就是上面配置需要國(guó)際化的語(yǔ)言那一步(步驟:project->Info->Localizations,然后點(diǎn)擊"+",添加需要國(guó)際化/本地化的語(yǔ)言)。

Snip20160616_14.png

點(diǎn)擊Localize后,會(huì)彈出一個(gè)對(duì)話(huà)框,展開(kāi)對(duì)話(huà)框列表,發(fā)現(xiàn)下拉列表所展示的語(yǔ)言正是我們?cè)谏厦媾渲玫男枰獓?guó)際化的語(yǔ)言,選擇我們需要本地化的語(yǔ)言,然后點(diǎn)擊對(duì)話(huà)框的Localize按鈕,如下圖:

Snip20160617_10.png

Snip20160617_12.png

注意:如果我們沒(méi)有在 PROJECT 中配置需要國(guó)際化的語(yǔ)言(project->Info->Localizations,然后點(diǎn)擊"+"),上圖下拉列表中將只會(huì)出現(xiàn)"Base"和"English"選項(xiàng),English語(yǔ)言是系統(tǒng)默認(rèn)的語(yǔ)言,其他需要國(guó)際化的語(yǔ)言(例如中文簡(jiǎn)體、法語(yǔ))必須通過(guò)上面的配置本地化語(yǔ)言那一步手動(dòng)添加。

然后我們發(fā)現(xiàn)Xcode右側(cè)的File inspection變成了下圖的樣式:

Snip20160617_13.png

接下來(lái),勾選French、Chinese(zh-Hans)、Chinese(zh-Hant)、Korean,如下圖:

Snip20160617_14.png

此時(shí),Xcode左側(cè)的InfoPlist.stirings左側(cè)多了一個(gè)箭頭,點(diǎn)擊箭頭可以展開(kāi),如下圖所示:

Snip20160617_15.png

從上圖可以看出,InfoPlist.strings文件下包含了English、French、Chinese(Simplified)、Chinese(Traditional)、Korean這五種語(yǔ)言的文件。

原理:程序啟動(dòng)時(shí),會(huì)根據(jù)操作系統(tǒng)設(shè)置的語(yǔ)言,自動(dòng)加載InfoPlist.strings文件下對(duì)應(yīng)的語(yǔ)言文件,然后顯示應(yīng)用程序的名字。

接下來(lái),我們分別用不同的語(yǔ)言給InfoPlist.strings下的文件設(shè)置對(duì)應(yīng)的名字。

(1)在InfoPlist.strings(english)中加入如下代碼:

// Localizable App Name是App在英語(yǔ)環(huán)境環(huán)境下顯示的名稱(chēng)CFBundleDisplayName="Localizable App Name";

備注:CFBundleDisplayName可以使用雙引號(hào),也可以不使用雙引號(hào)!

Snip20160617_21.png

(2)在InfoPlist.strings(French)中加入如下代碼:

CFBundleDisplayName="Le nom de la localisation de l'App";

Snip20160617_27.png

(3)在InfoPlist.strings(Chinese(Simplified))中加入如下代碼:

CFBundleDisplayName="國(guó)際化App名稱(chēng)";

need-to-insert-img

Snip20160617_32.png

(4)在InfoPlist.strings(Chinese(Traditional))中加入如下代碼:

CFBundleDisplayName="國(guó)際化App名稱(chēng)";

need-to-insert-img

Snip20160617_30.png

(5)在InfoPlist.strings(Korean)中加入如下代碼:

CFBundleDisplayName="??? ? ??";

need-to-insert-img

Snip20160617_31.png

修改模擬器語(yǔ)言環(huán)境為English。App名稱(chēng)如下圖:

need-to-insert-img

Snip20160617_33.png

修改模擬器語(yǔ)言環(huán)境為Chinese(Simplified)。App名稱(chēng)如下圖:

need-to-insert-img

Snip20160618_4.png

修改模擬器語(yǔ)言環(huán)境為Chinese(Traditional)。App名稱(chēng)如下圖:

need-to-insert-img

Snip20160618_5.png

修改模擬器語(yǔ)言環(huán)境為Franch。App名稱(chēng)如下圖:

need-to-insert-img

Snip20160618_6.png

修改模擬器語(yǔ)言環(huán)境為Korean。App名稱(chēng)如下圖:

need-to-insert-img

Snip20160618_7.png

備注:過(guò)去本地化App名稱(chēng),需要在Info.plist文件中增加一個(gè)名為“Application has localized display name”的BOOL類(lèi)型的Key,并且需要將其值設(shè)置為YES(如下圖)。目的是讓App支持本地化App名稱(chēng)。但現(xiàn)在可以忽略這一步

need-to-insert-img

Snip20160618_8.png

至此,本地化App名稱(chēng)已經(jīng)演示完畢,其步驟就是:

在Project的設(shè)置中通過(guò)點(diǎn)擊"+"添加需要本地化的語(yǔ)言。

然后在Xcode右側(cè)的File inspection中點(diǎn)擊Localize,選中需要本地化App名稱(chēng)的語(yǔ)言。

最后在每個(gè)語(yǔ)言對(duì)應(yīng)的文件中以key = value(CFBundleDisplayName = "App名稱(chēng)";);的形式設(shè)置App的名稱(chēng)。

(二)代碼中字符串的本地化

所謂字符串本地化,就是指App內(nèi)的字符串在不同的語(yǔ)言環(huán)境下顯示不同的內(nèi)容。比如,"主頁(yè)"這個(gè)字符串在中文語(yǔ)言環(huán)境下顯示“主頁(yè)”,在英語(yǔ)環(huán)境下顯示“home”。下面就開(kāi)始進(jìn)行字符串本地化。

其實(shí)字符本地化和App名稱(chēng)本地化過(guò)程如出一轍,只是創(chuàng)建的文件名成不一樣(連同后綴一起,文件名必須是Localizable.strings),其他步驟完全相同。為了能夠讓大家徹底了解,此處還是會(huì)把步驟一一貼出來(lái)。

和應(yīng)用名稱(chēng)本地化一樣,首先需要command + N,選擇iOS -> Resource -> Strings File

need-to-insert-img

文件名必須命名為Localizable

備注:因本人電腦取消隱藏文件后綴名,所以會(huì)自動(dòng)補(bǔ)全.strings后綴名。

need-to-insert-img

Snip20160619_8.png

文件創(chuàng)建成功,查看Xcode左側(cè)導(dǎo)航列表,發(fā)現(xiàn)多了一個(gè)名為L(zhǎng)ocalizable.strings的文件,如下圖:

need-to-insert-img

Snip20160619_4.png

選中Localizable.strings文件,在Xcode的File inspection中點(diǎn)擊Localize,目的是選擇我們需要本地化的語(yǔ)言(和本地化App名稱(chēng)同理),如下圖:

依次選擇English->Localize,如下圖:

然后我們發(fā)現(xiàn)Xcode右側(cè)的File inspection變成了下圖的樣式:

然后勾選French、Chinese(zh-Hans)、Chinese(zh-Hant)、Korean,如下圖:

此時(shí),Xcode左側(cè)的Localizable.stirings左側(cè)多了一個(gè)箭頭,展開(kāi)后,如下圖所示:

Snip20160619_6.png

然后我們只需要在Localizable.strings下對(duì)應(yīng)的文件中,分別以Key-Value的形式,為代碼中每一個(gè)需要本地化的字符串賦值,如下圖:

need-to-insert-img

Snip20160619_9.png

need-to-insert-img

Snip20160619_10.png

need-to-insert-img

Snip20160619_12.png

need-to-insert-img

Snip20160619_13.png

need-to-insert-img

Snip20160619_14.png

本地化代碼中的字符串,如下圖:

need-to-insert-img

Snip20160619_15.png

我們只需要使用Foundation框架自帶的NSLocalizedString(key, comment)這個(gè)宏根據(jù)Key獲取對(duì)應(yīng)的字符串,然后賦值給代碼中的字符串。

// NSLocalizedString(key, comment) 本質(zhì)// NSlocalizeString 第一個(gè)參數(shù)是內(nèi)容,根據(jù)第一個(gè)參數(shù)去對(duì)應(yīng)語(yǔ)言的文件中取對(duì)應(yīng)的字符串,第二個(gè)參數(shù)將會(huì)轉(zhuǎn)化為字符串文件里的注釋?zhuān)梢詡鱪il,也可以傳空字符串@""。#defineNSLocalizedString(key, comment) [[NSBundle mainBundle] localizedStringForKey:(key) value:@""table:nil]

不同語(yǔ)言環(huán)境下運(yùn)行效果,如下圖:

英語(yǔ)環(huán)境下:

need-to-insert-img

Snip20160619_17.png

法語(yǔ)環(huán)境下:

need-to-insert-img

Snip20160619_18.png

簡(jiǎn)體中文環(huán)境下:

need-to-insert-img

Snip20160619_19.png

繁體中文環(huán)境下:

need-to-insert-img

Snip20160619_20.png

韓語(yǔ)環(huán)境下:

need-to-insert-img

Snip20160619_23.png

如此一來(lái),我們就實(shí)現(xiàn)了代碼中字符串的本地化。

技巧

其實(shí),我們不需要給Localizable.strings(English)文件添加Key-Value。原因如下:系統(tǒng)根據(jù)某個(gè)key去獲取對(duì)應(yīng)的字符串時(shí),如果沒(méi)有找到,那么就會(huì)以key作為value返回。所以如果我們?cè)贚ocalizable.strings(English)文件中沒(méi)有添加 click = "hit";那么在english環(huán)境下btn最終顯示的title會(huì)是click.

切換語(yǔ)言無(wú)需在模擬器中設(shè)置,只需要在Xcode中進(jìn)行如下設(shè)置: Edit->Scheme->Run->Arguments Passed On Launch ->-AppleLanguages (語(yǔ)言代碼)。例如,我們模擬器此時(shí)雖然是韓語(yǔ),如果通過(guò)上述步驟設(shè)置為zh-Hans,那么語(yǔ)言環(huán)境將會(huì)變?yōu)闈h語(yǔ),如下圖:

need-to-insert-img

Snip20160619_26.png

need-to-insert-img

Snip20160619_28.png

運(yùn)行效果:

Snip20160619_29.png

如此一來(lái),切換語(yǔ)言變得更加簡(jiǎn)單,無(wú)需在模擬器的設(shè)置中進(jìn)行繁瑣的語(yǔ)言切換。

(三)多人開(kāi)發(fā)情況下的字符串本地化

項(xiàng)目開(kāi)發(fā)中,獨(dú)立開(kāi)發(fā)的還是少數(shù)。經(jīng)常會(huì)有多人開(kāi)發(fā)的情況,這種情況,如果多人同時(shí)操作本地化文件,極有可能會(huì)存在沖突。另一方面,我們又不希望自己的本地化文件受到對(duì)方的污染,也就是說(shuō),我們不希望對(duì)方操作我們的本地化文件。但是上面介紹的代碼中字符串的本地化是使用的是默認(rèn)的文件名"Localizable",因?yàn)閱?dòng)程序時(shí),系統(tǒng)將根據(jù)語(yǔ)言加載相應(yīng)的文件得到其對(duì)應(yīng)的字符串文件,這個(gè)字符串可以通過(guò)系統(tǒng)將NSLocalizedString中的宏生成名為“Localizable.strings”的文件。那么如何讓系統(tǒng)加載我們自己命名的本地化文件而非系統(tǒng)默認(rèn)的Localizable.strings呢?這就是 NSLocalizedStringFromTable(<#key#>, <#tbl#>, <#comment#>)的用處。

也就是說(shuō),如果你的strings文件名字不是Localizable而是自定義的話(huà),如VVS.strings,那么你就得使用NSLocalizedStringFromTable這個(gè)宏來(lái)讀取本地化字符串。

// key:系統(tǒng)根據(jù)key取字符串// tbl:自定義strings文件的名字// comment:可以不傳NSLocalizedStringFromTable(<#key#>,<#tbl#>,<#comment#>)

Snip20160619_32.png

#import"ViewController.h"@interfaceViewController()@property(weak,nonatomic)IBOutletUIButton*btn;@end@implementationViewController- (void)viewDidLoad {? ? [superviewDidLoad];NSString*title =NSLocalizedStringFromTable(@"click",@"VVS",nil);? ? [self.btn setTitle:title forState:UIControlStateNormal];}@end

運(yùn)行效果,如下圖:

Snip20160619_33.png

如此一來(lái),我們就可以?huà)昝搫e人的strings文件和系統(tǒng)默認(rèn)的Localizable.strings文件,自己另起爐灶。

(四)圖片本地化

本地化圖片,有兩種方式,第一種方式和本地化代碼中的字符串一樣,通過(guò)NSLocalizedString(key,comment)來(lái)獲取相應(yīng)的字符串,然后根據(jù)這個(gè)字符串再獲取圖片。

方式一

NSString*imageName =NSLocalizedString(@"icon",nil);UIImage*image = [UIImageimageNamed:imageName];self.imageView.image = image;

方式二

首先需要添加需要本地化的語(yǔ)言,具體步驟參考第一章配置需要國(guó)際化的語(yǔ)言。因?yàn)槲已菔镜膁emo中在本地化App名稱(chēng)時(shí)已經(jīng)添加了需要國(guó)際化的語(yǔ)言。所以不需要再設(shè)置。

將圖片拖入工程中,例如“icon.png”,然后選中icon.png,展開(kāi)Xcode右側(cè)的file Inspection,點(diǎn)擊Localize,如下圖:

need-to-insert-img

Snip20160619_36.png

然后,右擊icon.png->show in Finder,我們發(fā)現(xiàn)在en.Iproj文件中多了一個(gè)名為icon.png的圖片,如下圖:

need-to-insert-img

Snip20160619_38.png

當(dāng)然,zh-Hans.Iproj文件夾下并沒(méi)有圖片,如下圖:

need-to-insert-img

Snip20160619_39.png

我們只需給zh-Hans.Iproj添加一個(gè)名字也為icon.png的圖片。如下圖:

need-to-insert-img

Snip20160619_40.png

然后把zh-Hans.Iproj中的icon.png拖到Xcode中,如下圖:

need-to-insert-img

Snip20160619_43.png

然后發(fā)現(xiàn),icon.png左邊出現(xiàn)了一個(gè)可以展開(kāi)的三角形。如下圖:

need-to-insert-img

Snip20160619_44.png

展開(kāi)后發(fā)現(xiàn)里面包含兩張圖片,如下圖:

need-to-insert-img

Snip20160619_45.png

然后控制器中添加如下代碼:

#import"ViewController.h"@interfaceViewController()@property(weak,nonatomic)IBOutletUIImageView*imageView;@end@implementationViewController- (void)viewDidLoad {? ? [superviewDidLoad];NSString*imageName =NSLocalizedString(@"icon",nil);UIImage*image = [UIImageimageNamed:imageName];self.imageView.image = image;}@end

english環(huán)境下運(yùn)行效果如下:

Snip20160620_46.png

中文環(huán)境改下運(yùn)行效果如下:

Snip20160620_47.png

其他語(yǔ)言環(huán)境,例如法語(yǔ)、中文繁體、韓語(yǔ),操作步驟完全和上面相同。都是在對(duì)應(yīng)的.Iproj文件夾下添加同名的圖片,然后把圖片拖放到Xcode中,不再贅述。

(五)查看/切換本地語(yǔ)言

原理:應(yīng)用啟動(dòng)時(shí),首先會(huì)讀取NSUserDefaults中的key為AppleLanguages對(duì)應(yīng)的value,該value是一個(gè)String數(shù)組,也就是說(shuō),我們?cè)L問(wèn)這個(gè)名為AppleLanguages的key可以返回一個(gè)string數(shù)組,該數(shù)組存儲(chǔ)著APP支持的語(yǔ)言列表,數(shù)組的第一項(xiàng)為APP當(dāng)前默認(rèn)的語(yǔ)言。

#import"ViewController.h"@interfaceViewController()@end@implementationViewController- (void)viewDidLoad {? ? [superviewDidLoad];NSArray*languages = [[NSUserDefaultsstandardUserDefaults] valueForKey:@"AppleLanguages"];NSString*currentLanguage = languages.firstObject;NSLog(@"模擬器當(dāng)前語(yǔ)言:%@",currentLanguage);}@end

-控制臺(tái)打印結(jié)果:

Snip20160620_1.png

同理,既然我們可以通過(guò)AppleLanguages這個(gè)key從NSUserDefaults中取出語(yǔ)言數(shù)組,那么我們也可以給AppleLanguages這個(gè)key賦值來(lái)達(dá)到切換本地語(yǔ)言的效果,從此以后,我們就無(wú)需頻繁的去模擬器的設(shè)置->通用->語(yǔ)言與地區(qū) 中切換語(yǔ)言。

#import"ViewController.h"@interfaceViewController()@end@implementationViewController- (void)viewDidLoad {? ? [superviewDidLoad];// 切換語(yǔ)言前NSArray*langArr1 = [[NSUserDefaultsstandardUserDefaults] valueForKey:@"AppleLanguages"];NSString*language1 = langArr1.firstObject;NSLog(@"模擬器語(yǔ)言切換之前:%@",language1);// 切換語(yǔ)言NSArray*lans = @[@"en"];? ? [[NSUserDefaultsstandardUserDefaults] setObject:lans forKey:@"AppleLanguages"];// 切換語(yǔ)言后NSArray*langArr2 = [[NSUserDefaultsstandardUserDefaults] valueForKey:@"AppleLanguages"];NSString*language2 = langArr2.firstObject;NSLog(@"模擬器語(yǔ)言切換之后:%@",language2);}@end

Snip20160620_2.png

回想一下,我在上面的技巧一節(jié)中提過(guò):切換語(yǔ)言無(wú)需在模擬器中設(shè)置,只需要在Xcode中進(jìn)行如下設(shè)置: Edit->Scheme->Run->Arguments Passed On Launch ->-AppleLanguages (語(yǔ)言代碼)。其實(shí)本質(zhì)上就是給NSUserDefaults中名為AppleLanguages的key賦值。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,885評(píng)論 6 541
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,312評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 177,993評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,667評(píng)論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,410評(píng)論 6 411
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,778評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,775評(píng)論 3 446
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,955評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,521評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,266評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,468評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,998評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,696評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,095評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,385評(píng)論 1 294
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,193評(píng)論 3 398
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,431評(píng)論 2 378

推薦閱讀更多精彩內(nèi)容