dutchify plugin
Een nederlandstalige website bouwen met rails is als rijden in een stoptrein. Scaffolding gebruikt; de volgende halte is “het aanpassen van de knoppen en labels”, validaties toegevoegd; de volgende halte is “het vertalen van de foutmeldingen” etc. etc. Alle snelheids verhogende features zijn doordrenkt van engelse drempels. Ik wil met de intercity!
Met de dutchify plugin doe ik een poging om alle amerikanismes aan de presentatie kant aan te pakken. Ik heb me bewust alleen op nederlands gericht omdat ik me niet alle i18n en l10n problemen op de hals wil halen, deze zijn veel te gemakkelijk te onderschatten. Ook hou ik me verre van het vertalen van classes en methodes, voor je het weet zit je een source-filter te schrijven als perligata.
Het gebruiken van een nederlandstalig datamodel valt buiten deze plugin. Hier valt veel voor te zeggen en is vaak zelfs belangrijk voor het beheersbaar houden van een project.
wat zit er wel in?
- data
-
Alle maanden en weekdagen zijn vertaald en er worden automatisch nederlandse formaten getoond. Geen onnodig geklooi met
strftime
meer. Update 1distance_of_time_in_words
geeft een nederlandse versie terug. - rangtelwoorden
-
De
Integer#ordinalize
methode geeft een nederlandse variant terug;1.ordinalize # => "1ste"
- pluralize, camelize, underscore en titleize
-
Nou ja, niet echt. Nederlandse meervoudsregels zijn veel te ingewikkeld maar met een elegante ruby oplossing kom ik op:
"ding".with_plural("dingen")
, deze expressie levert een string"ding"
welke op depluralize
methode"dingen"
antwoordt. Update 3 De methodencamelize
,underscore
entitleize
zijn IJ-bewust. - validatie berichten
- De standaard validatie berichten zijn vertaald.
- model- en kolomnamen
-
ActiveRecord is uitgebreid met een class methode
dutch_names
waarmee de nederlandse naam van het model en z’n kolommen gegeven kan worden. Voor modelBicycle
zou je het volgende kunnen gebruiken:dutch_names(“fiets”.with_plural(“fietsen”), :brand => ‘merk’, :color => ‘kleur’)
- scaffolding
- Dynamische scaffold is helemaal vernederlandst.
- number helper
-
Update 2 De methodes
number_to_currency
,human_size
,number_to_percentage
ennumber_with_delimiter
geven nu nederlandse varianten terug.
nog te doen
-
,distance_of_time_in_words
select_date
enselect_datetime
-
“3 dagen en 4 uur geleden”.De volgorde van dropdown velden is niet logisch in een nederlandstalige context. -
titelize
-
IJ is een enkele letter in het nederlands. -
punten en komma’s -
In het nederlands staan punten en komma’s precies anders om; €4.999.999,95 - routing
-
Misschien een
dutch_names
methode voor controllers? - scaffold generator
- Eigenlijk ben ik hier al helemaal op uitgekeken en gebruik ik deze niet meer. Kans is dus erg klein dat ik deze aanpak.
installatie
./script/plugin install http://svn.remvee.net/plugins/dutchify
ben ik iets vergeten?
Erg goed! Ik ben zelf aan het proberen met rails wat aan de praat te krijgen. Mis alleen nog een goede Nederlandse host. Tips?
Netjes … Helaas heb ik geen nederlands project … Ik zou graag iets willen maken, liefst niet alleen.
Klinkt goed. Ik ga het zeker eens proberen.
Geldt voor de validatie berichten dat ook de dutch_names voor de veldnamen worden gebruikt?
Mooi trouwens, die voorvertoning!
Uiteraard worden
dutch_names
in de validatie berichten meegenomen.Ziet er goed uit, maar ik mis een handleiding.
Waar moet dutch_names, in het model of in in het migrate-bestand? Wat zet ik dan in het view? kortom, een heleboel vragen die ik graag in een handleiding beantwoord zou zien.
Ik heb een probleempje met je plugin.
View:
Controller:
Dit levert het volgende op:
mySql vindt dit niet fijn:
Is dit eenvoudig te fixen?
Bertus,
Vreemd genoeg kan ik deze foutmelding niet reproduceren. Stukkie
script/console
:In deze test applicatie had ik al een model
Item
met kolomname
. Hierboven voeg iktest_date
kolom toe en zet er 1-1-2006 in. Het record is aangemaakt echter:De datum staat op 0-0-0000.. Zelf gebruik ik de
Date
class nooit maar gebruik ikTime
. In plaats vanDate.new(2006,1,1)
kan jeTime.mktime(2006,1,1)
gebruiken;Ha! Dat werkt! Is dus eenvoudig te fixen door geen
Date
maarTime
te gebruiken. WaaromDate
niet werkt weet ik niet en waarom er bij jouw een foutmelding verschijnt weet ik ook niet. Succes!Anoniempje, voor een handleiding zie
README
in de plugin directory (zojuist geupdate).Remco,
het probleem met de opmaak van de datum is opgelost. In date_time.rb zet je een default opmaak. Deze heb ik aangepast, en ziedaar, mySql is tevreden.
Misschien handig om dit in README te beschrijven?
Bertus
Bertus, je hebt helemaal gelijk. Dat
:default
datum formaat werkt gewoon niet. Vreemd genoeg moet ik foutmeldingen ontberen. Ik heb jouw formaat als default genomen en het, door mij vergeten,:long
formaat vernederlands. Dank!Het is een beetje vreemd dat rails klakkeloos het
:default
formaat gebruikt bij het opbouwen van SQL statements. VoorTime
objecten is er een:db
formaat welke ook niet voor SQL statements wordt gebruikt..Nog wat onderzoek gedaan naar het
Date
formaat probleem. Het is toch echt een bug in het verwerken vanDate
objecten bij het opbouwen van SQL . Gelukkig gemakkelijk op te lossen.Toen ik op dev.rubyonrails.org een patch wilde uploaden om het probleem te verhelpen kwam ik het volgende ticket tegen: #6019 Changing default date format affects date objects written to MySQL. M’n patch hieraan toegevoegd nu maar afwachten.
Voorlopig heb ik aan dutchify een hack toegevoegd om om dit gat heen te dansen en het “mooiere” datum formaat weer terug gezet als default. Het werkt goed onder 1.1.6 en edge.
Bedankt Remco, dit is precies wat ik nodig had!
Check ook eens de atkMetaGrammar voor pluralize functie! (achievo atk project, ala rails alleen dan in PHP ).
Die gebruiken:
Het probleem lijkt triviaal maar het is veel ingewikkelder dan dat. Bijvoorbeeld:
is allemaal nog wel te doen maar met:
wordt het allemaal toch een beetje ingewikkeld..
Wel heb ik eindelijk een site gevonden waar dit soort dingen goed worden uitgelegt; De Elektronische ANS . Iets voor een regenachtige zondag middag..
Remco,
Na upgrade Ruby 186-25 en Rails 1.2.3 werkt je plugin niet meer, getuige onderstaande melding:
Kun je hier eens naar kijken? Alvast bedankt!
Remco,
ik heb het gefikst door in date_time.rb het volgende toe te voegen:
Weet niet zeker of hierdoor alles weer correct werkt, maar webrick start weer op.
Bertus
Ik heb zojuist een fix ingechecked. Deze array’s zijn in 1.8.6 verhuist van
Date
naarDate::Format
.Toch lijkt het vertalen in 1.8.6 niet 100% te werken. Zie: http://blog.remvee.net:80/2007/04/09/dutchify_update_voor_Ruby_1_8_6#comments
Remco,
Er gaat nog iets mis met Ruby 1.8.6 en Rails 1.2.3. In date_select wordt de maand niet vertaalt.
Bertus
Bertus, probleem is opgelost. Dank voor je input!