Sageli on vajadus käänake nimesid PHP-s. Nõus, et fraas " Lisa sõbraks Ilya"kõlab palju hullemini kui" Lisa Ilya oma sõbraks". Sellepärast Nimede käänded suur- ja suurtähe järgi PHP-s Seda nõutakse üsna sageli ja selles artiklis räägin teile, kuidas saate seda oma veebisaidil rakendada.
Ma ütlen kohe, et kahjuks pole ideaalset võimalust. Esimene võimalus on väga ilmne: leidke nimede andmebaas, mis on kõigil juhtudel olemas, ja lisage see tabel omale. Seejärel otsi nimetavas käändes nime järgi andmebaasist vastav kääne. Puudused on siin ilmselged: tohutu andmebaas, ei suuda kõiki nimesid katta, serveril on lisakoormus.
Teine võimalus on kirjutada ise nimede käände klass PHP-s või kasutage valmis. Kuna vene keele reeglid on üsna keerulised, lisaks on palju erandeid, vajate väga suurt raamatukogu ja isegi see pole kaugeltki 100% päästmine. Kõige populaarsem kõigist raamatukogudest, mis tegelevad Nimede käänded PHP-s, on NameCaseLib .
Pärast selle teegi allalaadimist ja veebisaidile paigutamist saate seda kasutada järgmiselt:
$case = uus NCLNameCaseRu(); // Looge klassi NCLNameCaseRu objekt
$massiiv = $case->q("Rusakov Mihhail Jurjevitš"); // Saame 6-st elemendist koosneva massiivi, mis vastab 6-le juhtumile, mil sisendstring ilmub
print_r($massiiv); // Väljastage massiiv
?>
Nagu näete, on raamatukogu kasutamine väga lihtne. Teisest küljest oleks minu peamine nõuanne järgmine: Võimalusel vältige vajadust sõnu üldse käänata.. Sellegipoolest tutvustavad inimesed mõnikord midagi, millele ei saa kuidagi kalduda, ja katsed seda esile kutsuda näevad naeruväärsed. pole vaja kirjutada" Lisa Ilya oma sõbraks"Seda võib lihtsalt kirjutada" Lisa sõbraks"Ilja lehel.
Moodul morpher.so on mõeldud sõnade ja fraaside – perekonnanimede, eesnimede ja isanimede, linnade ja kaupade nimede – suur- ja suurtähtede lahutamiseks vene ja ukraina keeles.
Deklinatsioonifunktsioon juhtumite kaupa
Üks miljon dollarit lähebalatesNaberežnõje Tšelnõi" , " varras " ); ?> !
Selle tulemusena saame:
Üks miljon dollarit saab Naberežnõje Tšelnõi Vassili Pupkin!
Funktsioon morpher_inflec käänab fraasi nimetavas käändes (esimene argument) mis tahes käändeks (teine argument). Juhtumil võib olla järgmine tähendus:
Kõik teeki edastatavad stringid peavad olema UTF-8 kodeeringus. Tulemus tagastatakse ka UTF-8-s.
Ukraina keele vastavat funktsiooni nimetatakse morpher_ukr_inflect. Siiani töötab see ainult perekonnanimede, eesnimede ja isanimedega ning erineb vene keelest juhtude nimede poolest:
Tõlki mitmusesse pole ukrainakeelses versioonis veel rakendatud.
Nime komponentideks jaotamise funktsioon
Funktsioon morpher_split_fio jagab sisendstringi perekonnanime, eesnime ja keskmise nime massiiviks
N: Puppkin I: Vassili O:
Mitmuse funktsioon
Kui lisate teisele parameetrile stringi "mn", on tulemus mitmuses:
Jääb laos 238 .
Lakku on jäänud 238 pokkerit.
Kui esimene parameeter on juba mitmuses, tagastatakse järgmine:
#VIGA: parameetri 1 "tekst" on mitmus.
Perekonna määramise funktsioon
" y " , " f " => " y " , " n " => " oh " , " p " => " y " ); $nimi = "eksperdid"; $varras = morpher_get_gender ($nimi); kaja "Me austame sind." $lõpud [ $rod ] . " ". $nimi . " !\n " ; ?>
Perekonnanimede, eesnimede ja isanimede soo määramiseks ukraina keeles kasutage funktsiooni morpher_ukr_get_gender. See tagastab ainult "m" (mees) või "f" (naine).
Numbrite ja rahasummade kirjutamise funktsioon
Funktsioon morpher_spell moodustab arvu õigekirja ja seab antud mõõtühiku soovitud käände:
kalendripäev" ); // 28 (kakskümmend kaheksa) kalendripäeva morpher_spell("1,2", "protsent"); // 1,2 (üks koma kaks) protsenti morpher_spell(2, "day"); // 2 (kaks) päeva ?>
Kui peate teatud käändes teksti sisestama sõnu, määrake kolmanda parameetrina suurtäht:
ajalkalendripäev" , " R " ); ?> .
Selle tulemusena saame „28 (kahekümne kaheksa) kalendripäeva jooksul”.
Aktsepteeritavad tõstuväärtused: I, R, D, V, T, P ja nende analoogid, kirjutatud ladina keeles, vt. See funktsioon ei toeta eessõnavorme (predl-o ja gde).
Mõnede rahaühikute nimede puhul loob funktsioon morpher_spell sellise kirjapildi:
Sada kakskümmend kolm rubla 45 kopikat morpher_spell(123,45, "USD"); // Sada kakskümmend kolm USA dollarit 45 senti morpher_spell(123,45, "euro"); // Sada kakskümmend kolm eurot 45 senti?>
Soovi korral võite kasutada rahaühikute lühendatud nimetusi, punktiga või ilma:
Sada kakskümmend kolm rubla. 45 kopikat morpher_spell(123,45, "$"); // Sada kakskümmend kolm USA dollarit 45 senti morpher_spell (123.45, " UAH " ); // Sada kakskümmend kolm UAH. 45 kopikat?>
Või rahvusvahelise standardi ISO 4217 kolmetähelised valuutakoodid, nt RUB, USD, EUR jne. Sel juhul lisatakse valuuta nimetusse automaatselt riigi nimi:
Sada kakskümmend kolm Vene rubla 45 kopikat morpher_spell(123,45, "UAH"); // Sada kakskümmend kolm Ukraina grivnat 45 kopikat morpher_spell(123.45, "KZT"); // Sada kakskümmend kolm Kasahstani tenge 45 tiyns?>
Viga töötlemisel
Kui ilmneb tõrge, tagastavad kõik teegi funktsioonid rea, mis algab sõnadega "#ERROR:" .
#ERROR: parameetri 1 "tekst" väli ei tohi olla tühi. |
#ERROR: parameetri 2 "case" väli ei tohi olla tühi. |
#VIGA: Parameeter 1 "tekst" ei ole venekeelne. |
#VIGA: parameetri 2 "juht" on kehtetu. |
#VIGA: parameetri 1 "tekst" on mitmus. |
Kui te ei soovi, et kasutaja neid sõnumeid näeks, kontrollige algset alamstringi "#ERROR:" .
Funktsioon morpher_inflec eeldab 2 parameetrit ja morpher_get_gender ühte. Kui kutsutakse välja vale parameetrite arvuga, annab PHP-tõlk hoiatuse ja jätkab programmi täitmist.
Mooduli installimine Linuxile
Alates versioonist 1.3.0 pakume PHP Linuxi versiooni jaoks moodulit eelkompileeritud morpher.so failide kujul, mis on pakitud arhiivi. Need failid sobivad kasutamiseks järgmistes Linuxi distributsioonides:
- Debian (Jessie, Stretch, Wheezy);
- Ubuntu (trusty, Xenial, Cosmic, Bionic);
- CentOS 7.
Kõik, mida pead tegema, on meile kirjutada, et hankida oma distributsiooni jaoks fail morpher.so, ekstrakt morpher.so arhiivist ja morpher.so PHP laiendusena. Kuid sellise mooduli binaarne ühilduvus teie süsteemiga ei ole garanteeritud, kuna me ehitame mooduli ainult "puhastele" süsteemidele vaikeseadetega ja PHP versiooniga, mida süsteemipaketihaldur pakub. Kui moodul ei ühildu, ei saa PHP seda laiendusena laadida. Kui ükski valmis mooduli failidest ei sobi teie süsteemile, peate mooduli koostama antud lähtekoodist.
Mugavuse ja mooduli kokkupanemise protseduuri lihtsustamise huvides sisaldab jaotuskomplekt komplekti skripte, mis automatiseerivad kompileerimiseks vajalike pakettide paigaldamise, mooduli kokkupanemise ja mooduli registreerimise PHP laiendusena. Arvestades operatsioonisüsteemi distributsioonide laia valikut, erinevaid konfiguratsioonivõimalusi ja php laienduste kokkupanemise funktsioone, peate mõistma, et mõnel juhul võib mooduli installimisel tekkida vajadus täiendavate toimingute järele, mida montaažiskriptid ei rakenda.
Automaatse installiprotseduuri alustamiseks pakkige distributsioon lahti mis tahes kataloogi, näiteks morpher:
# mkdir morpher # cd morpher # tar xf ../morpher.tar # cd phpKäivitage ehitusskript käsuga:
# bash build.shKui see õnnestub, kompileeritakse mooduli fail morpher.so ja teisaldatakse see php-laiendite kataloogi. Moodul registreeritakse php konfiguratsioonis ja mooduli funktsionaalsust kontrollitakse automaatselt testi abil. Assamblee skripti tekstiväljund peaks sisaldama teadet, mis näitab edukat testimist:
Käimas testid... ... tehtud.
Teie moodul on kasutamiseks valmis. Kataloogi saab nüüd kustutada:
# rm -r morpherKui teil on ehitamisega probleeme, peate veenduma, et kõik vajalikud paketid on teie süsteemi installitud ja konfigureeritud. Mooduli kokkupanemiseks ja kasutamiseks peate installima:
Saate alustada lihtsalt mooduli ehitamist ilma täiendavate toiminguteta käsuga:
# bash compile.shPärast edukat kompileerimist asub fail morpher.so kataloogis morpher/php/modules.
Fail morpher.so tuleb paigutada PHP laienduste kataloogi, näiteks:
# php-config --extension-dir/usr/lib/php5/20121212 # mv modules/morpher.so /usr/lib/php5/20121212/Laienduse kataloog võib teie süsteemis erineda.
# bash setup.shvõi määrake laiendi nimi failis php.ini ise. Laienduse funktsionaalsust saate kontrollida, käivitades käsitsi käsurealt PHP testskripti:
# php -f test.php Käimas testid... ... tehtud.Võimalikud vead kokkupanekul ja nende kõrvaldamise viisid
Viga: /usr/bin/ld: -lm ei leitud
Põhjus: teil pole installitud paketti glibc-static.
Viga: .../include/php/php_config.h:2526:30: viga: ülekoormatud 'isnan(double&)' kutse on mitmetähenduslik. (rea number võib teie PHP versioonis ja konfiguratsioonis erineda)
Väga populaarne probleem Veebi programmeerijad, See Sõnade käänded PHP-s. Näiteks peate kuvama, mitu minutit tagasi sõnum jäeti. Võite lihtsalt kirjutada numbri ja sõna " minutit". Aga siis kirjutatakse väga imelikult, näiteks " 1 minutit", "2 minutit" ja nii edasi. Tegelikult ilma Sõnade käänded PHP-s Seda ei saa teha, kui muidugi just vene keeles kirjutada ei taha.
Probleem tundub algajatele väga keeruline, kuid tegelikult on sõnade deklinatsioonil teatud muster. Vaata ise: " 1 minut, 2 minutit, 5 minutit, 11 minutit, 19 minutit, 21 minutit, 22 minutit, 25 minutit ja nii edasi"Kas näete mustrit? 1, 21, 31, 41 - jääb alatiseks" minut". Kui vähima tähtsusega number on suurem 1 ja vähem 5 , samas kui arv ise jagatuna arvuga 100 ülejääk on suurem 20 (see ei ole näiteks arv 12 ja mitte 112 ), siis tuleb " minutit". Muudel juhtudel" minutit".
funktsioon getWord($number, $sufiks) (
$võtmed = massiiv(2, 0, 1, 1, 1, 2);
$mod = $number % 100;
$suffix_key = ($mod > 7 && $mod< 20) ? 2: $keys;
return $sufiks[$sufiksi_võti];
}
$massiiv = array("minut", "minutid", "minutid"); $n = 21;
echo "$n $word
";
$n = 11;
$sõna = getWord($n, $massiiv);
echo "$n $word
";
$n = 4;
$sõna = getWord($n, $massiiv);
echo "$n $word
";
?>
Selle skripti käivitamisel näete seda Sõnade käänded PHP-s juhtub pauguga. Võin ainult lisada, et lisaks " minutit"võib olla" päeval", "tund", "Inimene", "arvuti" ja kõik muud nimisõnad, mis langus sõltuvalt numbrist.
JavaScript on teie brauseris blokeeritud. Saidi toimimiseks lubage JavaScript!
API sõna deklinatsiooni, soo (mehelik, naiselik), suurtähtede, käände ja muude sõna omaduste hankimiseks
Word Declension API
Valikud:käänata- tühikuga eraldatud sõna või sõnade loend. Järgmised valikud on saadaval ainult ühe sõna edastamisel.
kõne osa –
Kirjeldaja | Näide | Kirjeldus |
---|---|---|
C | Ema | nimisõna |
P | punane | omadussõna |
KR_APIL | ilus | lühike omadussõna |
INFINITIIVNE | mine | infinitiiv |
G | tulemas | isiklik tegusõna |
OSALIK | kõndides | osastav |
OSALIK | läheb | osastav |
KR_PARTICIPLE | ehitatud | lühike osalause |
NUMBER | kaheksa | arv (kvantitatiivne) |
NUMBER-P | kaheksas | järgarv |
PRL | Ta | asesõna-nimisõna |
MS-PREDC | mitte midagi | predikatiivne asesõna |
MS-P | ükskõik milline | pronominaalne omadussõna |
N | Lahe | määrsõna |
ESIVANE | Huvitav | predikaat |
ETTEVALMISTUS | all | ettekäändeks |
LIIT | Ja | liit |
VAHEL | Oeh | vahelehüüe |
SAGE | noh, oleks | osakest |
INVODN | Kindlasti | sissejuhatav sõna |
PHRAZ | lebavad lahed, zgi | fraseoloogiline üksus |
Grammema | Kirjeldus | |
---|---|---|
Perekond | ||
härra | mehelik | |
zhr | naiselik | |
kolmap | neutraalne sugu | |
mr-zhr | üldine sugu (orb, joodik) | |
Number | ||
ühikut | ainsus | |
pl | mitmuses | |
Juhtum | ||
neid | nimetav | |
rd | genitiiv | |
dt | daativ | |
vn | süüdistav | |
TV | instrumentaalne | |
jne | eessõna | |
heli | vokatiiv (isa, jumal) | |
2 | teine genitiiv või teine eessõna kääne | |
Aeg | ||
nst | praegune aeg | |
tahe | Tulevik | |
prsh | minevikuvorm | |
Nägu | ||
1l | esimene isik | |
2l | teine inimene | |
3l | kolmas osapool | |
Animatsioon | ||
od | animeerima | |
Aga | elutu | |
Vaade | ||
St. | täiuslik vaade | |
ns | ebatäiuslikud liigid | |
Transitiivsus | ||
np | üleminek | |
ne | intransitiivne | |
Pant | ||
dst | aktiivne hääl | |
lehel | passiivne hääl | |
muud | ||
0 | muutumatu | |
bezl | umbisikuline tegusõna | |
pvl | imperatiivne meeleolu (imperative) | |
atraktsioon | omastav (ei kasutata) | |
eelmine | ülivõrde (omadussõnade jaoks) | |
võrdlema | võrdlev aste (omadussõnade jaoks) | |
kvaliteet | kvalitatiivne omadussõna | |
Semantilised omadused | ||
Nimi | nimi (Ivan, Mihhail) | |
femme | perekonnanimi (Ivanov, Sidorov) | |
aruanne | isanimi (Ivanovitš, Mihhailovitš) | |
lok | toponüüm (Moskva, Lena, Everest) | |
lühend | lühend (KPSS, RONO) | |
org | organisatsioon | |
küsimus | küsiv määrsõna | |
näidata | demonstratiivne määrsõna | |
släng | žargoon | |
lagunemine | kõnekeel | |
arch | arhaism | |
HRH | kirjaviga | |
luuletaja | poeetiline | |
prof | professionaalsus |
Http://site/service/api.php?inflect=Magadan&json
("0":"MAGADAN","1":"MAGADAN","2":"MAGADAN","3":"MAGADAN","4":"MAGADAN","5":"MAGADAN"," 6":"MAGADANA","7":"MAGADANA","8":"MAGADANA","9":"MAGADANA","limit":38)
Http://site/service/api.php?inflec=Magadan
Http://site/service/api.php?inflect=Rostov-on-Don&xml
Kõigi elutute mitmuse omadussõnade saamiseks sõnast "pulm" helistage:
Https://site/service/api.php?inflect=wedding&json&partofspeech=P&grammems=NO,MN&info
Hankige:
("0":("word":"WEDDING","partofspeech":"P","grammems":["DT","QUALITY","MN","NO","OD"]), " 1":("sõna":"PULM","kõneosa":"P","grammeems":["IM","QUALITY","MN","BUT","OD"]), "2" :("sõna":"PULM","kõneosa":"P","grammeems":["VN","KACH","MN","BUT"]), "3":("sõna": "PULM","kõneosa":"P","grammems":["QUALITY","MN","BUT","OD","RD"]), "4":("sõna":"PULM ","kõneosa":"P","grammems":["KVALITEET","MN","BUT","OD","PR"]), "5":("sõna":"PULM" " partofspeech":"P","grammems":["QUALITY","MN","NO","OD","TV"]) ,,"limit":19) Ilma teabeparameetrita:
http://site/service/api.php?inflect=wedding&json&partofspeech=P&grammems=NO,MN
("0":"PULM","1":"PULM","2":"PULM","3":"PULM", "4":"PULM","5":"PULM"," piir":19)
API sõna sugu, nimi: mees, naine hankimiseks
API soo hankimiseks: mees, naine nime järgi. Selle API abil saate kasutajanime abil teada saada kasutaja soo. See välistab vajaduse täita registreerimisel täiendavat vormi.
Tere, Habrahabr!
Täna räägin väikesest, kuid väga kasulikust raamistikust - NameCaseLib.
Arvan, et paljud on kokku puutunud olukorraga, kus inimese perekonnanimi, eesnimi ja isanimi tuli juhtumite kaupa tagasi lükata. See raamistik aitab meil vabaneda paljudest "jalgratastest".
Paigaldamine
NameCaseLibi töötamiseks vajame UTF-8 vormingus tekstiga töötamiseks PHP5 ja php_mbstring teeki.Suurepärane, nüüd jääb üle vaid raamistik ise ühendada, selleks laadime alla vajalikud failid.
NameCaseLib toetab kahte keelt: vene ja ukraina keelt. Fail NCL.NameCase.ru.php sisaldab venekeelseid käändereegleid, NCL.NameCase.ua.php vastavalt ukraina omasid. NCL-kaust sisaldab raamistiku tuuma, see tähendab põhifunktsioonide komplekti.
Niisiis, loome .php-vormingus faili ja kontrollime selle raamistiku funktsionaalsust.
# Указываем кодировку. header("Content-type: text/html; charset=utf-8"); # Подключаем русские правила склонения. require "NCL.NameCase.ru.php"; # Объявляем объект класса. $case = new NCLNameCaseRu(); # Метод q - склоняет Фамилию, Имя и Отчество человека по правилам пола. $array = $case->q ("Maksimov Aleksander Vassiljevitš"); # Väljutage saadud massiiv. (Märkus: tagastab lihtsa indekseeritava massiivi) var_dump($massiivi); ?>
Vastavalt sellele saame samamoodi keelduda ukraina täisnimedest, ühendades ukraina keele käändereeglid.
Kuid vaatame siiski, milliseid parameetreid meetod sisaldab q, ja kuidas seda veel kasutada saab?
Sellel meetodil on 3 parameetrit, millest 2 võib ära jätta. Esimene parameeter on isiku täisnimi, teine suur- ja suurtäht (allpool esitan konstantide loendi; kui suurtähte pole määratud (NULL), tagastab meetod kõik juhtumid) ja kolmas on isiku sugu. (Altpool on toodud ka konstandid; kui te ei määra sugu (NULL), määrab meetod selle ise)
Konstandid
Soo märkimiseks kasutatakse konstante:- NCL::$MAN – meessugu
- NCL::$WOMAN – naine
Vene keele juhtude märkimiseks:
- NCL::$IMENITLN – nimetavas käändes
- NCL::$RODITLN – genitiivtäht
- NCL::$DATELN – daatiivne kääne
- NCL::$VINITELN – akusatiiv
- NCL::$TVORITELN - instrumentaalkohver
- NCL::$PREDLOGN – eessõna kääne
Ukraina keele juhtude märkimiseks:
- NCL::$UaNazyvnyi – nimesilt
- NCL::$UaRodovyi – üldvaade
- NCL::$UaDavalnyi – pikaajaline administraator
- NCL::$UaZnahidnyi – kuulus video
- NCL::$UaOrudnyi – relvade väljapanek
- NCL::$UaMiszevyi – miscevyi vidminok
- NCL::$UaKlychnyi – isiklik märkus
Märkmed
- Nime järjekord ei oma tähtsust.
- Pole tähtis, millisel juhul näidatakse täisnime, pärast käänet tagastab meetod salvestatud tähtede.
Täisnime osa määratlus
Kasutades meetodit getFullNameFormat, saame määrata osa või milliseid täisnime osi kasutame.
# Указываем кодировку. header("Content-type: text/html; charset=utf-8"); # Подключаем русские правила склонения. require "NCL.NameCase.ru.php"; # Объявляем объект класса. $case = new NCLNameCaseRu(); # Метод getFullNameFormat - разбивает строку и возвращает формат, в котором записано имя. $fullName = $case->getFullNameFormat("Maksimov Aleksander Vassiljevitš"); /* Saame vormingu nagu: S F N, kus: - S - Perekonnanimi - N - Eesnimi - F - Keskmine nimi */ echo $fullName; ?>
Aga mida peaksite tegema, kui raamistik ei suuda ikkagi õigesti määrata, kuidas teie valitud nime tagasi lükata?
Selleks pakub teek meetodit qFullName, mis võimaldab teatud järjekorras määrata inimese perekonnanime, eesnime, isanime ja sugu.
# Указываем кодировку. header("Content-type: text/html; charset=utf-8"); # Подключаем русские правила склонения. require "NCL.NameCase.ru.php"; # Объявляем объект класса. $case = new NCLNameCaseRu(); # Параметры метода: qFullName(Фамилия, Имя, Отчество, пол, падеж, формат); Все параметры являются необязательными, если, например, не указать пол - система сама определит его. echo $nc->qFullName("Maksimov", "Aleksander", "Vasiljevitš", NCL::$MAN, NCL::$TVORITELN, "S N F")."\n"; ?>