Files
cagettepei/src/sugoi/helper/Ordinal.hx
T
2021-08-27 17:54:17 +04:00

114 lines
2.5 KiB
Haxe

package mt.net.helper;
/**
* Ordinal number helper
*
* @author fbarbut
**/
class Ordinal /*implements IHelper*/{
public var lang : String;
public static var AVAILABLE_LANGS = ['fr','en','es'];
public function new(_lang:String) {
lang = _lang.toLowerCase();
if(!Lambda.has(AVAILABLE_LANGS, lang)) lang = 'en';
}
/**
* Get output, like "1st" or "2nd"
* @param rank number/rank starting from 1
* @param ?sex 1:male,2:female, 3: neutral (german)
* @param ?format text format like "::rank::<span>::suffix::</span>"
*/
public function toString(rank:Int, ?sex:Int, ?format:String):String {
var suffix = "";
if(sex == null) sex = 1;
switch(lang) {
case "fr":
if(rank == 1) {
suffix = (sex==1)?"er":"ère";
}else {
suffix = "ème";
}
case "es":
//http://reglasdeortografia.com/numerales.html
suffix = (sex == 1)?"o":"a";
case "de":
switch(sex) {
case 1 :
suffix = "ter";
case 2 :
suffix = "te";
default :
suffix = "tes";
}
default:
//"en":
if(rank == 1) {
suffix = "st";
}else if(rank == 2) {
suffix = "nd";
}else if(rank == 3) {
suffix = "rd";
}else {
suffix = "th";
}
/*DE
*
* Karsten :
Hihi. Un peu compliqué pour l'Allemand comme les suffix/mots dépendend de nombre exacte. ...en plus il y un troisième sexe.
Je propose tu utilise ce modèle qui fonctionne toujours: > X : X.
Voici le modèle complète :
> masculin:
> X = 1 : Erster
> X = 2 : Zweiter
> X = 3 : Dritter
> X = 4-19 : Xter
> X = 20-1000 : Xster
... + : Les derniers 3 chiffres décident de nouveau (comme indiqué anvant)
p.ex. 232456 = Y[232]X[456]
> neutre :
> X = 1 : Erstes
> X = 2 : Zweites
> X = 3 : Drittes
> X = 4-19 : Xtes
> X = 20-1000 : Xstes
... + : Les derniers 3 chiffres décident de nouveau (comme indiqué anvant)
p.ex. 232456 = Y[232]X[456]
> feminin :
> X = 1 : Erste
> X = 2 : Zweite
> X = 3 : Dritte
> X = 4-19 : Xte
> X = 20-1000 : Xste
... + : Les derniers 3 chiffres décident de nouveau (comme indiqué anvant)
p.ex. 232456 = Y[232]X[456]>
* */
}
if(format != null) {
format = StringTools.replace(format, "::rank::", Std.string(rank));
format = StringTools.replace(format, "::suffix::", Std.string(suffix));
return format;
}else {
return rank + suffix;
}
}
}