Skip to content

Instantly share code, notes, and snippets.

@flexchar
Forked from farico/gist:3938084
Last active November 15, 2023 11:06
Show Gist options
  • Save flexchar/24d824d63c4e3027ea742112e3547dd9 to your computer and use it in GitHub Desktop.
Save flexchar/24d824d63c4e3027ea742112e3547dd9 to your computer and use it in GitHub Desktop.
Lietuviškų žodžių linksniavimas PHP Trait
<?php
namespace path\to\this;
/**
* Lietuviškų vardų linksniai.
*/
trait Linksniai {
/**
* Vardų transformacija
*
* @param string $vardas lietuviškas vardas arba pavardė
* @param string $linksnis sutrumpintas linksnio pavadinimas: kil, nau, gal, ina, vie, sau
* @return string
*/
function getName ($vardas, $linksnis = 'sau') {
$vardai = explode(' ', $this->sanitizeName($vardas));
$vardaiL = array();
foreach ($vardai as $v) {
$vardaiL[] = $this->getLinksnis($v, $linksnis) ;
}
return count($vardaiL) ? implode(' ', $vardaiL) : $vardas;
}
/**
* Vardų sanitarija
*
* @param string $vardas lietuviškas vardas arba pavardė
* @return string
*/
function sanitizeName ($vardas) {
$vardas = mb_eregi_replace('[^a-ž]', ' ', $vardas);
$vardas = mb_eregi_replace('\s+', ' ', $vardas);
$vardas = trim($vardas);
$vardas = mb_convert_case($vardas, MB_CASE_TITLE);
return $vardas;
}
/**
* Vardas linksnyje
*
* @param string $vardas lietuviškas vardas arba pavardė
* @param string $linksnis sutrumpintas linksnio pavadinimas: kil, nau, gal, ina, vie, sau
* @return string
*/
function getLinksnis ($vardas, $linksnis = 'sau') {
//Just incase
mb_internal_encoding('UTF-8');
//$link- library of endings depending on declension
// kilmininkas (ko?)
$link['kil'] = array(
'a' => 'os',
'as' => 'o',
'ė' => 'ės',
'tis' => 'čio',
'dis' => 'džio',
'is' => 'io',
'us' => 'aus',
'tys' => 'čio',
'dys' => 'džio',
'ys' => 'io'
);
// naudininkas (kam?)
$link['nau'] = array(
'a' => 'ai',
'as' => 'ui',
'ė' => 'ei',
'tis' => 'čiui',
'dis' => 'džiui',
'is' => 'iui',
'us' => 'ui',
'tys' => 'čiui',
'dys' => 'džiui',
'ys' => 'iui'
);
// galininkas (ką?)
$link['gal'] = array(
'a' => 'ą',
'as' => 'ą',
'ė' => 'ę',
'is' => 'į',
'us' => 'ų',
'ys' => 'į'
);
// įnagininkas (kuo?)
$link['ina'] = array(
'a' => 'a',
'as' => 'u',
'ė' => 'e',
'tis' => 'čiu',
'dis' => 'džiu',
'is' => 'iu',
'us' => 'u',
'tys' => 'čiu',
'dys' => 'džiu',
'ys' => 'iu'
);
// vietininkas (kur? kame?)
$link['vie'] = array(
'a' => 'oje',
'as' => 'e',
'ė' => 'ėje',
'is' => 'yje',
'us' => 'uje',
'ys' => 'yje'
);
// šauksmininkas, įprastas kreipinys
$link['sau'] = array(
'a' => 'a',
'as' => 'ai',
'ė' => 'e',
'is' => 'i',
'us' => 'au',
'ys' => 'y'
);
foreach ($link[$linksnis] as $from => $to) {
if (mb_substr($vardas, -mb_strlen($from)) == $from)
{
$vardas = mb_substr($vardas, 0, -mb_strlen($from));
$vardas .= $to;
break;
}
}
return $vardas;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment