. */ declare(strict_types=1); namespace Fisharebest\Webtrees; use Fisharebest\Webtrees\SurnameTradition\DefaultSurnameTradition; use Fisharebest\Webtrees\SurnameTradition\IcelandicSurnameTradition; use Fisharebest\Webtrees\SurnameTradition\LithuanianSurnameTradition; use Fisharebest\Webtrees\SurnameTradition\MatrilinealSurnameTradition; use Fisharebest\Webtrees\SurnameTradition\PaternalSurnameTradition; use Fisharebest\Webtrees\SurnameTradition\PatrilinealSurnameTradition; use Fisharebest\Webtrees\SurnameTradition\PolishSurnameTradition; use Fisharebest\Webtrees\SurnameTradition\PortugueseSurnameTradition; use Fisharebest\Webtrees\SurnameTradition\SpanishSurnameTradition; use Fisharebest\Webtrees\SurnameTradition\SurnameTraditionInterface; /** * */ class SurnameTradition { /** * Create a surname tradition object for a given surname tradition name. * * @param string $name Internal name of the surname tradition * * @return SurnameTraditionInterface */ public static function create(string $name): SurnameTraditionInterface { switch ($name) { case 'paternal': return new PaternalSurnameTradition(); case 'patrilineal': return new PatrilinealSurnameTradition(); case 'matrilineal': return new MatrilinealSurnameTradition(); case 'portuguese': return new PortugueseSurnameTradition(); case 'spanish': return new SpanishSurnameTradition(); case 'polish': return new PolishSurnameTradition(); case 'lithuanian': return new LithuanianSurnameTradition(); case 'icelandic': return new IcelandicSurnameTradition(); default: return new DefaultSurnameTradition(); } } /** * A list of known surname traditions, with their descriptions * * @return array */ public static function allDescriptions(): array { return [ 'paternal' => I18N::translateContext('Surname tradition', 'paternal') . ' — ' . /* I18N: In the paternal surname tradition, ... */ I18N::translate('Children take their father’s surname.') . ' ' . /* I18N: In the paternal surname tradition, ... */ I18N::translate('Wives take their husband’s surname.'), 'patrilineal' => /* I18N: A system where children take their father’s surname */ I18N::translate('patrilineal') . ' — ' . /* I18N: In the patrilineal surname tradition, ... */ I18N::translate('Children take their father’s surname.'), 'matrilineal' => /* I18N: A system where children take their mother’s surname */ I18N::translate('matrilineal') . ' — ' . /* I18N: In the matrilineal surname tradition, ... */ I18N::translate('Children take their mother’s surname.'), 'spanish' => I18N::translateContext('Surname tradition', 'Spanish') . ' — ' . /* I18N: In the Spanish surname tradition, ... */ I18N::translate('Children take one surname from the father and one surname from the mother.'), 'portuguese' => I18N::translateContext('Surname tradition', 'Portuguese') . ' — ' . /* I18N: In the Portuguese surname tradition, ... */ I18N::translate('Children take one surname from the mother and one surname from the father.'), 'icelandic' => I18N::translateContext('Surname tradition', 'Icelandic') . ' — ' . /* I18N: In the Icelandic surname tradition, ... */ I18N::translate('Children take a patronym instead of a surname.'), 'polish' => I18N::translateContext('Surname tradition', 'Polish') . ' — ' . /* I18N: In the Polish surname tradition, ... */ I18N::translate('Children take their father’s surname.') . ' ' . /* I18N: In the Polish surname tradition, ... */ I18N::translate('Wives take their husband’s surname.') . ' ' . /* I18N: In the Polish surname tradition, ... */ I18N::translate('Surnames are inflected to indicate an individual’s gender.'), 'lithuanian' => I18N::translateContext('Surname tradition', 'Lithuanian') . ' — ' . /* I18N: In the Lithuanian surname tradition, ... */ I18N::translate('Children take their father’s surname.') . ' ' . /* I18N: In the Lithuanian surname tradition, ... */ I18N::translate('Wives take their husband’s surname.') . ' ' . /* I18N: In the Lithuanian surname tradition, ... */ I18N::translate('Surnames are inflected to indicate an individual’s gender and marital status.'), 'none' => I18N::translateContext('Surname tradition', 'none'), ]; } }