// // ERXDutchLocalizer.java // ERExtensions // // Created by Johan Henselmans on 08/11/09. // Copyright (c) 2009. All rights reserved. // package er.extensions.localization; /** * ERXDutchLocalizer is a subclass of {@link ERXLocalizer}. * <p> * Overrides <code>plurify</code> from its super class * and tries to pluralize the string according to dutch grammar rules. * * <pre> * +en voor de meeste substantieven * De bank -> de banken * Het boek -> de boeken * voorbeelden in context * * -s wordt –zen * de buis -> de buizen * het huis -> de huizen * voorbeelden in context * * -f wordt –ven * de korf -> de korven * voorbeelden in context * * -heid wordt –heden * de grootheid -> de grootheden * de waarheid -> de waarheden * voorbeelden in context * * meervoud met -s * * +s voor substantieven met meer dan 1 lettergreep die eindigen op -e, -el, -en, -er, -em, -ie * De wafel -> de wafels * voorbeelden in context * * +s voor substantieven die eindigen op é, eau: * Het cadeau -> De cadeaus * Het café -> de cafés * * +’s voor substantieven die eindigen op –a, -i, -o, -u, -y: * De paraplu -> De paraplu’s * voorbeelden in context * * +’s voor afkortingen, +'en als afkorting eindigt –s of -x: * tv -> tv's * GPS -> GPS'en * </pre> */ public class ERXDutchLocalizer extends ERXLocalizer { public ERXDutchLocalizer(String aLanguage) { super(aLanguage); } @Override protected String plurify(String name, int count) { String result = name; if(name != null && count > 1) { if(result.endsWith("s")) { result = result.substring(0, result.length()-1)+"zen"; } else if(result.endsWith("f")) { result = result.substring(0, result.length()-1)+"ven"; } else if(result.matches("^.....+[^e][lnrm]$")) { result = result.substring(0, result.length()-1)+"s"; } else if(result.matches("^.....+[^i][e]$")) { result = result.substring(0, result.length()-1)+"s"; } else if(result.matches("^.....+[e]$")) { result = result.substring(0, result.length()-1)+"s"; } else if(result.endsWith("heid")) { result = result.substring(0, result.length()-2)+"den"; } else if(result.endsWith("\u00E9")) { // here the é should be taken care of result = result.substring(0, result.length())+"s"; } else if(result.endsWith("eau")) { result = result.substring(0, result.length())+"s"; } else if(result.matches("^.+[aiouy]$")) { result = result.substring(0, result.length())+"'s"; // these are abbreviations, but which are there? } else if(result.matches("^.+[v]$")) { result = result.substring(0, result.length())+"'s"; } else if(result.matches("^.+[s]$")) { result = result.substring(0, result.length())+"'s"; // end abbreviations } else { result = result.substring(0, result.length())+"en"; } /* if(result.matches("^.+cie$")) return result; if(result.endsWith("ii")) { result = result.substring(0, result.length()-1); } */ } return result; } }