Tam adın ləğvi - NameCaseLib PHP Framework. PHP-də sözlərin azaldılması php

Çox vaxt ehtiyac olur PHP-də adları dəyişdirin. Razılaşın ki, " İlya dost kimi əlavə edin"dan çox pis səslənir" İlyanı dosta əlavə et". Buna görə də PHP-də adların hərflərə görə azaldılması Bu olduqca tez-tez tələb olunur və bu məqalədə bunu veb saytınızda necə həyata keçirə biləcəyinizi sizə xəbər verəcəyəm.

Dərhal deyim ki, təəssüf ki, ideal variant yoxdur. Birinci seçim çox açıqdır: bütün hallarda olacaq adlar bazasını tapın və bu cədvəli özünüzə əlavə edin. Sonra, nominativ halda adla, verilənlər bazasında müvafiq işi axtarın. Burada çatışmazlıqlar göz qabağındadır: böyük verilənlər bazası, bütün adları əhatə edə bilməz, serverə əlavə yük.

İkinci seçim özünüz yazmaqdır PHP-də adların azaldılması sinfi, və ya hazır birini istifadə edin. Rus dilində qaydalar olduqca mürəkkəb olduğundan, üstəlik bir çox istisnalar var, buna görə də çox böyük bir kitabxanaya ehtiyacınız olacaq və hətta bu, çox uzaqdır. 100% xilasetmə. Məşğul olan bütün kitabxanaların ən populyarı PHP-də adların azaldılması, NameCaseLibdir.

Bu kitabxananı yüklədikdən və vebsaytınıza yerləşdirdikdən sonra ondan bu şəkildə istifadə edə bilərsiniz:

Bir dəfə tələb et "NCL.NameCase.ru.php"; // Rus kitabxanasını birləşdirin
$case = yeni NCLNameCaseRu(); // NCLNameCaseRu sinfinin obyektini yaradın
$massiv = $case->q("Rusakov Mixail Yurieviç"); // Giriş sətirinin görünəcəyi 6 vəziyyətə uyğun gələn 6 elementdən ibarət massiv alırıq
print_r($massiv); // Massivi çıxarın
?>

Gördüyünüz kimi, kitabxanadan istifadə çox sadədir. Digər tərəfdən, mənim əsas məsləhətim bu olacaq: Mümkünsə, sözləri tamamilə dəyişdirmək ehtiyacından qaçın.. Bununla belə, bəzən insanlar heç bir şəkildə meyl edə bilməyən bir şey təqdim edəcəklər və onu təhrik etmək cəhdləri gülünc görünəcəkdir. yazmaq lazım deyil" İlyanı dosta əlavə et"Sadəcə yazmaq olar" Dost kimi əlavə et"İlyanın səhifəsində.

morpher.so modulu rus və ukrayna dillərində söz və ifadələrin - soyadların, adların və ataların adlarının, şəhərlərin və malların adlarının hərflərin azalması üçün nəzərdə tutulmuşdur.

Hallar üzrə azalma funksiyası

Bir milyon dollar gedir-danNaberejnıe Çelnı" , " rod " ); ?> !

Nəticədə əldə edirik:

Bir milyon dollar Naberejnıye Çelnıdan Vasili Pupkinə gedir!

morpher_inflect funksiyası nominativ halda (birinci arqument) bir cümləni istənilən hala (ikinci arqument) çevirir. Dava aşağıdakı mənaları ala bilər:

Kitabxanaya ötürülən bütün sətirlər UTF-8 kodlaşdırmasında olmalıdır. Nəticə UTF-8-də də qaytarılır.

Ukrayna dili üçün müvafiq funksiya morpher_ukr_inflect adlanır. İndiyə qədər o, yalnız soyad, ad və ata adı ilə işləyir və işlərin adlarında rus dilindən fərqlənir:

Cəm halına tərcümə Ukrayna versiyasında hələ həyata keçirilməyib.

Bir adı komponentlərə bölmək funksiyası

morpher_split_fio funksiyası giriş sətirini soyad, ad, ata adı massivinə bölür.

F: Pupkin I: Vasili O:

Çoxalma funksiyası

İkinci parametrə "mn" sətirini əlavə etsəniz, nəticə cəm şəklində olacaq:

Stokda qalıb 238 .

Anbarda 238 poker qalıb.

Əgər birinci parametr artıq cəmdirsə, onda aşağıdakılar qaytarılacaq:

#SƏHV: ​​Parametr 1 "mətn" cəmdir.

Cinsin təyini funksiyası

" y " , " f " => " y " , " n " => " oh " , " p " => " y " ); $name = "ekspertlər"; $rod = morpher_get_gender ($name); echo "Sənə hörmət edirik". $endings [ $rod ] . "". $adı. " !\n " ; ?>

Ukrayna dilində soyadların, adların və ata adlarının cinsini müəyyən etmək üçün morpher_ukr_get_gender funksiyasından istifadə edin. Yalnız "m" (kişi) və ya "f" (qadın) qaytarır.

Rəqəmlərin və pul məbləğlərinin yazılması funksiyası

morpher_spell funksiyası ədəd yaradır və verilən ölçü vahidini istədiyiniz halda qoyur:

təqvim günü" ); // 28 (iyirmi səkkiz) təqvim günü morpher_spell("1.2", "faiz"); // 1,2 (bir nöqtə iki) faiz morpher_spell(2, "gün"); // 2 (İki) gün ?>

Müəyyən bir halda mətnə ​​sözlər daxil etmək lazımdırsa, işi üçüncü parametr kimi göstərin:

ərzindətəqvim günü" , " R " ); ?> .

Nəticədə "28 (İyirmi səkkiz) təqvim günü ərzində" alırıq.

Qəbul edilən hal qiymətləri: I, R, D, V, T, P və onların latın dilində yazılmış analoqları, bax. Prepozisiya formaları (predl-o və gde) bu funksiyada dəstəklənmir.

Bəzi pul vahidlərinin adları üçün morpher_spell funksiyası belə bir yazım yaradır:

Yüz iyirmi üç rubl 45 qəpik morpher_spell(123.45, "USD"); // Yüz iyirmi üç ABŞ dolları 45 sent morpher_spell(123.45, "avro"); // Yüz iyirmi üç avro 45 sent?>

İstəyirsinizsə, nöqtəli və ya nöqtəsiz pul vahidlərinin qısaldılmış adlarından istifadə edə bilərsiniz:

Yüz iyirmi üç rubl. 45 qəpik morpher_spell(123.45, "$"); // Yüz iyirmi üç ABŞ dolları 45 sent morpher_spell (123.45, "UAH" ); // Yüz iyirmi üç UAH. 45 qəpik?>

Və ya RUB, USD, EUR və s. kimi ISO 4217 beynəlxalq standartının üç hərfli valyuta kodları. Bu halda, ölkənin adı avtomatik olaraq valyutanın adına daxil edilir:

Yüz iyirmi üç rus rublu 45 qəpik morpher_spell(123.45, "UAH"); // Yüz iyirmi üç Ukrayna qrivnası 45 qəpik morpher_spell(123.45, "KZT"); // Yüz iyirmi üç qazax təngəsi 45 tiyn?>

Emal zamanı xəta

Səhv baş verərsə, bütün kitabxana funksiyaları "#ERROR:" ilə başlayan sətir qaytarır.

#SƏHV: ​​Parametr 1 "mətn" boş olmamalıdır.
#SƏHV: ​​Parametr 2 "iş" boş olmamalıdır.
#SƏHV: ​​Parametr 1 "mətn" rus dilində deyil.
#SƏHV: ​​Parametr 2 "case" etibarsızdır.
#SƏHV: ​​Parametr 1 "mətn" cəmdir.

İstifadəçinin bu mesajları görməsini istəmirsinizsə, ilkin "#ERROR:" alt sətirini yoxlayın.

morpher_inflect funksiyası 2 parametr, morpher_get_gender isə bir parametr gözləyir. Yanlış sayda parametrlə çağırılırsa, PHP tərcüməçisi xəbərdarlıq edir və proqramı icra etməyə davam edir.

Modulun Linux-da quraşdırılması

1.3.0 versiyasından başlayaraq biz PHP-nin Linux versiyası üçün modulu arxivdə qablaşdırılmış əvvəlcədən tərtib edilmiş morpher.so faylları şəklində təqdim edirik. Bu fayllar aşağıdakı Linux paylamalarında istifadə üçün uyğundur:

  • Debian (Jessie, Stretch, Wheezy);
  • Ubuntu (Trusty, Xenial, Cosmic, Bionic);
  • CentOS 7.

Dağıtımınız üçün morpher.so əldə etmək üçün bizə yazmağınız kifayətdir, arxivdən morpher.so və PHP uzantısı olaraq morpher.so çıxarın. Bununla belə, belə modulun sisteminizlə binar uyğunluğuna zəmanət verilmir, çünki biz modulu yalnız standart parametrləri olan “təmiz” sistemlərdə və sistem paket menecerinin təklif etdiyi PHP versiyası ilə qururuq. Əgər modul uyğun deyilsə, PHP onu genişləndirmə kimi yükləyə bilməyəcək. Əgər hazır modul fayllarından heç biri sisteminiz üçün uyğun deyilsə, onda siz modulu təqdim olunmuş mənbə kodundan qurmalısınız.

Modulların yığılması prosedurunun rahatlığı və sadələşdirilməsi üçün paylama dəstinə kompilyasiya, modulların yığılması və PHP üçün əlavə kimi modulların qeydiyyatı üçün lazım olan paketlərin quraşdırılmasını avtomatlaşdıran bir sıra skriptlər daxildir. Əməliyyat sistemi paylamalarının müxtəlifliyini, müxtəlif konfiqurasiya variantlarını və php üçün genişləndirmələrin qurulmasının xüsusiyyətlərini nəzərə alaraq başa düşməlisiniz ki, bəzi hallarda modul quraşdırarkən montaj skriptləri tərəfindən həyata keçirilməyən əlavə hərəkətlərə ehtiyac yarana bilər.

Avtomatik quraşdırma proseduruna başlamaq üçün paylamanı istənilən qovluğa açın, məsələn, morpher:

# mkdir morpher # cd morfer # tar xf ../morpher.tar # cd php

Quraşdırma skriptini əmrlə işə salın:

# bash build.sh

Uğurlu olarsa, morpher.so modul faylı tərtib ediləcək və php uzantıları kataloquna köçürüləcək. Modul php konfiqurasiyasında qeydiyyatdan keçəcək və modulun funksionallığı test vasitəsilə avtomatik yoxlanılacaq. Montaj skriptinin mətn çıxışında testin uğurlu olduğunu göstərən bir mesaj olmalıdır:

Çalışan testlər... ... tamamlandı.

Modulunuz istifadəyə hazırdır. Kataloq indi silinə bilər:

# rm -r morfer

Quraşdırma ilə bağlı probleminiz varsa, bütün lazımi paketlərin sisteminizdə quraşdırıldığından və konfiqurasiya edildiyindən əmin olmalısınız. Modulu yığmaq və idarə etmək üçün aşağıdakıları quraşdırmalısınız:

Komanda ilə əlavə hərəkətlər etmədən modulun qurulmasına başlaya bilərsiniz:

# bash compile.sh

Uğurlu kompilyasiyadan sonra morpher.so faylı morpher/php/modules kataloqunda yerləşəcək.

Morpher.so faylı PHP genişləndirmələri kataloquna yerləşdirilməlidir, məsələn:

# php-config --uzatma-dir/usr/lib/php5/20121212 # mv modules/morpher.so /usr/lib/php5/20121212/

Genişləndirmə kataloqu sisteminizdə fərqli ola bilər.

# bash setup.sh

və ya php.ini faylında genişləndirmə adını özünüz təyin edin. Komanda xəttindən test PHP skriptini əl ilə işə salmaqla genişləndirmənin funksionallığını yoxlaya bilərsiniz:

# php -f testi.phpÇalışan testlər... ... tamamlandı.

Montaj zamanı mümkün səhvlər və onların aradan qaldırılması yolları

Xəta: /usr/bin/ld: -lm tapa bilmir

Səbəb: Sizdə glibc-statik paket quraşdırılmayıb.

Xəta: .../include/php/php_config.h:2526:30: xəta: həddən artıq yüklənmiş “isnan(double&)” çağırışı birmənalı deyil. (sətir nömrəsi PHP versiyanızda və konfiqurasiyanızda fərqli ola bilər)

Çox məşhur bir problemlə qarşılaşdı Veb proqramçılar, Bu PHP-də sözlərin azaldılması. Məsələn, mesajın neçə dəqiqə əvvəl qaldığını göstərməlisiniz. Siz sadəcə bir nömrə və bir söz yaza bilərsiniz " dəqiqə". Amma sonra çox qəribə yazılacaq, məsələn, " 1 dəqiqə", "2 dəqiqə" və s. Əslində, olmadan PHP-də sözlərin azaldılması Təbii ki, rus dilində yazmaq istəməsəniz, edə bilməzsiniz.

Problem yeni başlayanlar üçün çox çətin görünəcək, amma əslində sözlərin tənəzzülünün müəyyən bir nümunəsi var. Özünüz baxın: " 1 dəqiqə, 2 dəqiqə, 5 dəqiqə, 11 dəqiqə, 19 dəqiqə, 21 dəqiqə, 22 dəqiqə, 25 dəqiqə və s."Bir nümunə görürsən? 1, 21, 31, 41 - həmişə olacaq" dəqiqə". Ən az əhəmiyyətli rəqəm böyükdürsə 1-ci və daha az 5 , ədədə bölündükdə isə ədədin özü 100 daha böyük qalığı var 20 (yəni, məsələn, nömrə deyil 12 və yox 112 ), onda olacaq " dəqiqə". Digər hallarda " dəqiqə".

getWord funksiyası($nömrə, $şəkilçi) (
$ düymələri = massiv (2, 0, 1, 1, 1, 2);
$mod = $sayı % 100;
$suffix_key = ($mod > 7 && $mod< 20) ? 2: $keys;
qayıt $suffix[$suffix_key];
}
$massiv = massiv("dəqiqə", "dəqiqə", "dəqiqə"); $n = 21;

əks-səda "$n $söz
";
$n = 11;
$word = getWord($n, $massiv);
əks-səda "$n $söz
";
$n = 4;
$word = getWord($n, $massiv);
əks-səda "$n $söz
";
?>

Bu skripti işlətməklə siz bunu görəcəksiniz PHP-də sözlərin azaldılması zərbə ilə baş verir. Mən yalnız bunu əlavə edə bilərəm " dəqiqə"ola bilər" gün", "saat", "İnsan", "kompüter" və bütün digər isimlər rəqəmindən asılı olaraq azalır.

JavaScript brauzerinizdə bloklanıb. Saytın işləməsi üçün JavaScript-i aktiv edin!

Sözün declinasiyası, cinsin əldə edilməsi (kişi, qadın), hal, azalma və sözün digər xüsusiyyətləri üçün API

Word Declension API

Seçimlər:
salmaq- boşluqla ayrılmış söz və ya sözlərin siyahısı. Aşağıdakı seçimlər yalnız bir söz ötürüldükdə mümkündür.
nitqin hissəsi
DeskriptorMisalTəsvir
Canaisim
Pqırmızısifət
KR_APILgözəlqısa sifət
INFINITIVgetməsdər
Ggəlirşəxsi fel
İştirakgəzintiiştirakçı
İştirakgediriştirakçı
KR_PARTICIPLEtikilmişdirqısa üzv
NUMBERsəkkizrəqəm (kəmiyyət)
NÖMRƏ-Ssəkkizincisıra sayı
XanımOəvəzlik-isim
MS-PREDCheç nəpredikativ əvəzlik
MS-Phər hansıpronominal sifət
NSərinzərf
ƏcdadMaraqlıdırpredikat
HAZIRLIQaltındabəhanə
BİRLİKbirlik
ARASINDAahinterjection
TEZ-TEZyaxşı, olardıhissəcik
INVODNƏlbəttəgiriş sözü
PHRAZdalğalanan körfəzlər, zgifrazeoloji vahid
qrammalar– . "," (vergül) ilə ayrılmış müəyyən edilmişdir. İstisna etmək üçün qrammadan əvvəl "-" (mənfi) işarəsini göstərin.
QrammaTəsvir
Cins
Cənabkişi
zhrqadına xas
Çərşənbəneytral cinsi
mr-zhrümumi cins (yetim, sərxoş)
Nömrə
vahidlərtək
PLcəm
Case
onlarnominativ
rdcinsi
dtdative
vnittihamedici
TVinstrumental
və sön söz
səssəsli (ata, tanrı)
2 ikinci genitiv və ya ikinci prepozisiya halı
Vaxt
nstindiki zaman
olacaqGələcək zaman
prshkeçmiş zaman
Üz
1lbirinci şəxs
2likinci şəxs
3lüçüncü tərəf
Animasiya
odcanlandırmaq
Ammacansız
Baxın
St.mükəmməl mənzərə
nsqeyri-kamil növlər
Keçidlilik
npkeçid
yoxkeçidsiz
Girov
dstaktiv səs
səhifəpassiv səs
Digər
0 dəyişməz
bezlşəxssiz fel
pvlimperativ əhval-ruhiyyə (imperativ)
cazibəsahib (istifadə olunmur)
əvvəlkiüstün (sifətlər üçün)
müqayisə etməkmüqayisəli dərəcə (sifətlər üçün)
keyfiyyətkeyfiyyət sifət
Semantik xüsusiyyətlər
adadı (İvan, Mixail)
qadınsoyadı (İvanov, Sidorov)
hesabatatasının adı (İvanoviç, Mixayloviç)
loktoponim (Moskva, Lena, Everest)
abbrabbreviatura (KPSS, RONO)
orgtəşkilat
sualsual zərfi
göstərirnümayiş etdirici zərf
jarqonjarqon
parçalanmadanışıq dili
tağarxaizm
HRHyazı səhvi
şairpoetik
profpeşəkarlıq
məlumat– hər formanı əlavə məlumatla massiv kimi göstərin

Http://site/service/api.php?inflect=Magadan&json

("0":"MAGADAN","1":"MAGADAN","2":"MAGADAN","3":"MAGADAN","4":"MAGADAN","5":"MAGADAN"," 6":"MAGADANY","7":"MAGADANA","8":"MAGADANA","9":"MAGADANA","limit":38)

Http://site/service/api.php?inflect=Maqadan












Http://site/service/api.php?inflect=Rostov-on-Don&xml

<0>ROSTOV-ON-DON <1>ROSTOV-ON-DON <2>ROSTOV-ON-DON <3>ROSTOV-ON-DON <4>ROSTOV-ON-DON 46

"Toy" sözündən bütün cansız cəm sifətlərini almaq üçün zəng edin:

Https://site/service/api.php?inflect=wedding&json&partofspeech=P&grammems=NO,MN&info
Alın:
("0":("word":"WEDDING","partofspeech":"P","qrammemlər":["DT","QUALITY","MN","NO","OD"]), " 1":("word":"WEDDING","partofspeech":"P","qrammemlər":["IM","QUALITY","MN","AMMA","OD"]), "2" :("word":"WEDDING","partofspeech":"P","qrammemlər":["VN","KACH","MN","BUT"]), "3":("söz": "WEDDING","partofspeech":"P","qrammemlər":["QUALITY","MN","BUT","OD","RD"]), "4":("word":"WEDDING ","partofspeech":"P","qrammemlər":["QUALITY","MN","BUT","OD","PR"]), "5":("word":"WEDDING" " partofspeech":"P","grammems":["QUALITY","MN","NO","OD","TV"]) ,,"limit":19) Məlumat parametri olmadan:
http://site/service/api.php?inflect=wedding&json&partofspeech=P&grammems=NO,MN
("0":"WEDDING","1":"WEDDING","2":"TOY","3":"TOY", "4":"TOY","5":"TOY"," limit": 19)

Söz gender, ad almaq üçün API: kişi, qadın

Cins almaq üçün API: adla kişi, qadın. Bu API istifadə edərək, istifadəçi adından istifadə edərək istifadəçinin cinsini əldə edə bilərsiniz. Bu, qeydiyyat zamanı əlavə forma doldurmaq ehtiyacını aradan qaldıracaq.

Salam, Həbrahabr!

Bu gün mən kiçik, lakin çox faydalı bir çərçivə haqqında danışacağam - NameCaseLib.

Düşünürəm ki, bir çoxları elə bir vəziyyətlə qarşılaşıblar ki, hər hansı bir şəxsin soyadını, adını və atasının adını çəkməkdən imtina etmək lazım idi. Bu çərçivə bizə çoxsaylı "velosipedlərdən" qurtulmağa kömək edəcək.

Quraşdırma

NameCaseLib-in işləməsi üçün bizə PHP5 və UTF-8 formatında mətnlə işləmək üçün php_mbstring kitabxanası lazımdır.

Əla, indi yalnız çərçivənin özünü birləşdirmək qalır, bunun üçün lazımi faylları yükləyəcəyik.

NameCaseLib iki dili dəstəkləyir: Rus və Ukrayna. NCL.NameCase.ru.php faylında müvafiq olaraq Ukraynanın NCL.NameCase.ua.php, rus declension qaydaları var. NCL qovluğunda çərçivənin "əsas" hissəsi, yəni əsas funksiyalar dəsti var.

Beləliklə, .php formatında bir fayl yaradaq və bu çərçivənin funksionallığını yoxlayaq.

q("Maksimov Alexander Vasilieviç"); # Nəticə massivi çıxarın. (Qeyd: sadə indeksləşdirilə bilən massiv qaytarır) var_dump($array); ?>

Müvafiq olaraq, eyni şəkildə, Ukraynanın ləğvi qaydalarını birləşdirərək, Ukrayna tam adlarını rədd edə bilərik.

Ancaq yenə də metodun hansı parametrləri ehtiva etdiyinə baxaq q, və başqa necə istifadə edilə bilər?

Bu metodun 3 parametri var, onlardan 2-si buraxıla bilər. Birinci parametr şəxsin tam adıdır, ikincisi haldır (aşağıda sabitlərin siyahısını verəcəyəm; hal göstərilməyibsə (NULL), metod bütün halları qaytarır), üçüncüsü isə şəxsin cinsidir. (Sabitlər də aşağıda verilmişdir; cinsi (NULL) göstərməsəniz, metod onu özü müəyyən edəcək)

Sabitlər

Cinsiyyəti göstərmək üçün sabitlərdən istifadə olunur:
  • NCL::$MAN – kişi cinsi
  • NCL::$QADIN – qadın

Rus dilinin hallarını göstərmək üçün:

  • NCL::$IMENITLN - nominativ hal
  • NCL::$RODITLN - genitativ hal
  • NCL::$DATELN - tarixi hadisə
  • NCL::$VINITELN - ittiham halı
  • NCL::$TVORITELN - instrumental keys
  • NCL::$PREDLOGN - prepozisiya halı

Ukrayna dilinin hallarını göstərmək üçün:

  • NCL::$UaNazyvnyi – ad lövhəsi
  • NCL::$UaRodovyi – ümumi görünüş
  • NCL::$UaDavalnyi – uzunmüddətli admin
  • NCL::$UaZnahidnyi – məşhur video
  • NCL::$UaOrudnyi – silah ekranı
  • NCL::$UaMiszevyi – miscevyi vidminok
  • NCL::$UaKlychnı – şəxsi qeyd

Qeydlər

  1. Ad sırasının əhəmiyyəti yoxdur.
  2. Hansı halda tam adın göstərilməsinin əhəmiyyəti yoxdur, declensiyadan sonra üsul hərflərin saxlanmış halını qaytarır.

Tam adın bir hissəsinin tərifi

getFullNameFormat metodundan istifadə edərək hissəni və ya tam adın hansı hissələrini istifadə etdiyimizi müəyyən edə bilərik.

getFullNameFormat("Maksimov Alexander Vasilievich"); /* Biz belə bir format alırıq: S F N, burada: - S - Soyad - N - Ad - F - Ata adı */ echo $fullName; ?>

Bəs çərçivə hələ də seçdiyiniz addan necə imtina edəcəyinizi düzgün müəyyən edə bilmirsə nə etməlisiniz?

Bu məqsədlə kitabxana şəxsin soyadını, adını, atasının adını və cinsini müəyyən ardıcıllıqla göstərməyə imkan verən qFullName metodunu təqdim edir.

qFullName("Maksimov", "Alexander", "Vasilievich", NCL::$MAN, NCL::$TVORITELN, "S N F")."\n"; ?>

Nəticələr

NameCaseLib bir çox faydalı xüsusiyyətləri özündə cəmləşdirən həqiqətən istifadəçi dostu çərçivədir. Saytın rus dilində tam sənədləri var.