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 metstrftimemeer. Update 1 "@distanceof_time_in_words@":http://api.rubyonrails.org/classes/ActionView/Helpers/DateHelper.html geeft een nederlandse versie terug._- rangtelwoorden
-
De
Integer#ordinalizemethode 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 depluralizemethode"dingen"antwoordt. Update 3 De methodencamelize,underscoreentitleizezijn IJ-bewust. - validatie berichten
- De standaard validatie berichten zijn vertaald.
- model- en kolomnamen
-
ActiveRecord is uitgebreid met een class methode
dutch_nameswaarmee de nederlandse naam van het model en z’n kolommen gegeven kan worden. Voor modelBicyclezou 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 "@numberto_currency@":http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html,
human_size,number_to_percentageennumber_with_delimitergeven nu nederlandse varianten terug._
nog te doen
-
-
distance_of_time_in_words-,select_dateenselect_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_namesmethode 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_namesin 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:>> ActiveRecord::Migration.add_column :items, :test_date, :date -- add_column(:items, :test_date, :date) -> 0.2773s => nil >> reload! Reloading... => [ApplicationController, Item] >> d = Date.new(2006,1,1) => #<Date: 4907473/2,0,2299161> >> d.to_s => "zo 01 jan 2006" >> Item.create(:test_date => d) => #<Item:0x2699de8 @attributes={"id"=>13, "name"=>nil, "test_date"=>#<Date: 4907473/2,0,2299161>, @errors=#<ActiveRecord::Errors:0x2697228 @base=#<Item:0x2699de8 ...>, @errors={}>, @new_record=false>In deze test applicatie had ik al een model
Itemmet kolomname. Hierboven voeg iktest_datekolom toe en zet er 1-1-2006 in. Het record is aangemaakt echter:>> Item.find(13) => #<Item:0x267b924 @attributes={"name"=>nil, "id"=>"13", "test_date"=>"0000-00-00"}>De datum staat op 0-0-0000.. Zelf gebruik ik de
Dateclass nooit maar gebruik ikTime. In plaats vanDate.new(2006,1,1)kan jeTime.mktime(2006,1,1)gebruiken;>> Item.create(:test_date => Time.mktime(2005,1,1)) => #<Item:0x26e73f4 @attributes={"name"=>nil, "id"=>13, "test_date"=>Sat Jan 01 00:00:00 CET 2005}, @errors=#<ActiveRecord::Errors:0x26e4f78 @base=#<Item:0x26e73f4 ...>, @errors={}>, @new_record=false> >> Item.find(13) => #<Item:0x26d9a60 @attributes={"name"=>nil, "id"=>"13", "test_date"=>"2005-01-01"}>Ha! Dat werkt! Is dus eenvoudig te fixen door geen
DatemaarTimete gebruiken. WaaromDateniet werkt weet ik niet en waarom er bij jouw een foutmelding verschijnt weet ik ook niet. Succes!Anoniempje, voor een handleiding zie
READMEin 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
:defaultdatum formaat werkt gewoon niet. Vreemd genoeg moet ik foutmeldingen ontberen. Ik heb jouw formaat als default genomen en het, door mij vergeten,:longformaat vernederlands. Dank!Het is een beetje vreemd dat rails klakkeloos het
:defaultformaat gebruikt bij het opbouwen van SQL statements. VoorTimeobjecten is er een:dbformaat welke ook niet voor SQL statements wordt gebruikt..Nog wat onderzoek gedaan naar het
Dateformaat probleem. Het is toch echt een bug in het verwerken vanDateobjecten 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
DatenaarDate::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!