We are using slugs for translations in our site, and our site is quite big... :)
Pablo Viojo pvi...@gmail.com http://needish.com On Wed, Oct 14, 2009 at 1:59 PM, Larry E. Masters aka PhpNut < php...@gmail.com> wrote: > Miles, > > It is not a suggestion it is the correct way the code should be used. > > As I stated in the previous email the pot file is reopened, using poedit > for example, and you merge the changes from your code. Your .po and .mo > files will have the correct msgid and your translators will be able to open > the file and "know" that it has been altered because the fields are marked > as fuzzy translation. > > When I originally wrote this code I used gettext, which is a commonly used > implementation, as a model to build it for CakePHP. > > http://en.wikipedia.org/wiki/GNU_gettext > http://www.gnu.org/software/gettext/ > http://gnuwin32.sourceforge.net/packages/gettext.htm > > There are many other examples you can find on the internet showing proper > way to use gettext. > > Look at the site setup for translating GNU and other projects: > http://translationproject.org/ > > I doubt you will find a project out of the 160+ on that site using slugs > like you suggest. > > You can use the code however you like though. > > -- > /** > * @author Larry E. Masters > * @var string $userName > * @param string $realName > * @returns string aka PhpNut > * @access public > */ > > On Wed, Oct 14, 2009 at 11:21 AM, Miles J <mileswjohn...@gmail.com> wrote: > >> >> Additionally on the subject of PhpNut's suggestion. What if we change >> the text string in the view (english one) and then the translated ones >> wont match anymore because the msgid has changed. And if we generate >> new po files then we would have to translate them all over again. >> Thats primarily my reason for using slugs. >> >> On Oct 14, 7:15 am, Toby Ashley <lowpi...@gmail.com> wrote: >> > While this discussion is going on, I thought I'd raise / ask >> something... >> > >> > In a recent project, I needed to make it easy for administrators to be >> able >> > to edit the text used throughout the site. The site itself runs in 12 >> > languages, and as a result I have 12 *.po files, one per territory. The >> > administrators for each language are fairly non-technical, and so the >> system >> > needed to be easy. >> > >> > I built a simple system which would do the following: >> > >> > -- Provide a 'download existing website text' button to the >> administrator - >> > the controller action would then read through the appropriate *.po file >> and >> > generate a CSV with two columns, the identifier (i'm also using >> descriptive >> > slugs, as mentioned by Miles) and the current string for that identifier >> > >> > -- The administrator can then make the necessary amendments before >> > re-importing the CSV. When re-importing, the system backs up the >> existing >> > *.po file and creates a new one, manually writing the msgid and msgstr >> > values from the data in the CSV. Finally, when this is done, the system >> > removes any relevant cache files and hey presto - the website text is >> > updated. >> > >> > -- There's also tools to revert to previous backup, in case they make an >> > almighty mess of everything. >> > >> > This system worked fine for the project, and the administrators of the >> site >> > are maintaining the different languages with success, but I'm wondering >> if >> > there's a better / simpler / more recommend way of achieving the same >> > functionality. I guess it's kind of like a friendly, web-based interface >> for >> > editing these *.po files >> > >> > Any suggestions? >> > >> > Cheers, >> > toby >> > >> > On Wed, Oct 14, 2009 at 2:05 AM, Larry E. Masters aka PhpNut < >> > >> > php...@gmail.com> wrote: >> > > Cool, let me know if you have any questions. >> > > -- >> > > /** >> > > * @author Larry E. Masters >> > > * @var string $userName >> > > * @param string $realName >> > > * @returns string aka PhpNut >> > > * @access public >> > > */ >> > >> > > On Tue, Oct 13, 2009 at 7:46 PM, Miles J <mileswjohn...@gmail.com> >> wrote: >> > >> > >> Well see now a lot of it makes sense. The guide is pretty vague on >> > >> i18n/l10n and how it works / is used. >> > >> > >> Will give this a try. >> > >> > >> On Oct 13, 5:39 pm, "Larry E. Masters aka PhpNut" <php...@gmail.com> >> > >> wrote: >> > >> > Incorrect, the file that is created using the i18n extract creates >> a >> > >> .pot >> > >> > file which is a template file and can be opened in any po editor or >> text >> > >> > editor. The template is not language specific. There is no reason >> to >> > >> create >> > >> > these files by hand. Write your code and output using the sentences >> you >> > >> > would normally use just wrap the string in __() function. Run the >> > >> extractor >> > >> > and you are done. >> > >> > Easiest tool to edit translations I have recently found is >> > >> poedit.www.poedit.net >> > >> > >> > I uploaded current core extracted pot file. >> > >> > >> >http://cake-php.googlegroups.com/web/default.pot >> > >> > >> > Download it and open in poedit. >> > >> > >> > The nice thing about these pot file is you can create a new version >> with >> > >> > changes in your application, reopen the template in poedit, and it >> will >> > >> > merge changes highlighting the strings that have changed. >> > >> > >> > Not sure if you are aware how the other translation functions work >> in >> > >> the >> > >> > core, but when it comes to handling plurals in a sentence, your >> slugs >> > >> will >> > >> > become more confusing. >> > >> > >> > for($number = 0; $i < 100; $number++) { >> > >> > sprintf(__n('There is %d apple in the fruit bowl', 'There are %d >> apples >> > >> in >> > >> > the fruit bowl', $number), $number); >> > >> > >> > } >> > >> > >> > msgid "There is %d apple in the fruit bowl" >> > >> > msgid_plural "There are %d apples in the fruit bowl" >> > >> > msgstr[0] "" >> > >> > msgstr[1] "" >> > >> > msgstr[2] "" >> > >> > msgstr[3] "" >> > >> > msgstr[4] "" >> > >> > msgstr[5] "" >> > >> > msgstr[6] "" >> > >> > >> > There are 16 plural rules that range from 1 form of plural to 6 >> forms of >> > >> > plural depending on the value of $number. It all depends and the >> > >> language >> > >> > the content is being translated to. The above example be based on >> the >> > >> header >> > >> > in the po file, which poedit allows you to set based on the >> language you >> > >> are >> > >> > using. >> > >> > >> > Only 1 form of plural. >> > >> > "Plural-Forms: nplurals=1; plural=0;\n" >> > >> > >> > 6 forms of plural. >> > >> > "Plural-Forms: nplurals=4; plural=n==1 ? 0 : n==2 ? 1 : n==0 || >> (n>=3 && >> > >> > n<=10) ? 2 : 3;\n" >> > >> > >> > 14 other forms or plural are available. These will be added to the >> > >> > translation site I had online for the project before. This will be >> > >> coming >> > >> > back online in the next few weeks. They will also be added to the >> book, >> > >> with >> > >> > corrections on the proper use of these functions soon. If you need >> the >> > >> > correct plural form before then, let me know and I can reply with >> it. >> > >> > >> > -- >> > >> > /** >> > >> > * @author Larry E. Masters >> > >> > * @var string $userName >> > >> > * @param string $realName >> > >> > * @returns string aka PhpNut >> > >> > * @access public >> > >> > */ >> > >> > >> > On Tue, Oct 13, 2009 at 6:50 PM, Miles J <mileswjohn...@gmail.com> >> > >> wrote: >> > >> > >> > > But you would need to make the english po file anyways if you are >> > >> > > going to distribute it and have it translated. >> > >> > >> > > On Oct 13, 12:58 pm, "Larry E. Masters aka PhpNut" < >> php...@gmail.com> >> > >> > > wrote: >> > >> > > > So you are basically using these as "defines"? >> > >> > > > -- >> > >> > > > /** >> > >> > > > * @author Larry E. Masters >> > >> > > > * @var string $userName >> > >> > > > * @param string $realName >> > >> > > > * @returns string aka PhpNut >> > >> > > > * @access public >> > >> > > > */ >> > >> > >> > > > On Tue, Oct 13, 2009 at 2:19 PM, euromark (munich) < >> > >> > >> > > > dereurom...@googlemail.com> wrote: >> > >> > >> > > > > i agree with miles >> > >> > >> > > > > they should be slugged, short and precise >> > >> > > > > and explained in both the english and foreign .po file >> > >> > >> > > > > like >> > >> > >> > > > > "regMessageSuccess" >> > >> > > > > and >> > >> > > > > "You have been successfully registered" >> > >> > > > > "Sie sind nun erfolgreich angemeldet" >> > >> > >> > > > > or >> > >> > > > > "valErrorRecordNameExists" >> > >> > > > > for >> > >> > > > > "A record with this name already exists" >> > >> > >> > > > > this way you can easily change the "original" language text >> (here: >> > >> > > > > english) without having to change all the x places in the >> script >> > >> as >> > >> > > > > well >> > >> > >> > > > > maybe it is now supposed to be >> > >> > > > > "You cannot have two records with the same name" >> > >> > >> > > > > but the short slugged term has still the same basic meaning >> and >> > >> > > > > therefore remains the same >> > >> > >> > > > > On 13 Okt., 18:12, Miles J <mileswjohn...@gmail.com> wrote: >> > >> > > > > > I am personal extremely against naming your ids the full >> > >> sentence, >> > >> > > > > > what purpose does that serve? Its longer in both the .po >> and >> > >> .ctp >> > >> > > file >> > >> > > > > > and its a lot easier to reference slugs. To each his own I >> > >> guess. >> > >> > >> > > > > > On Oct 13, 7:42 am, "Larry E. Masters aka PhpNut" < >> > >> php...@gmail.com> >> > >> > > > > > wrote: >> > >> > >> > > > > > > Another thing I forgot to mention. You should be using >> full >> > >> strings >> > >> > > you >> > >> > > > > want >> > >> > > > > > > translated for the msgid.Example: >> > >> > >> > > > > > > msgid "By registering on this web site you are..." >> > >> > >> > > > > > > This is the way the core was designed to handle >> translations. >> > >> You >> > >> > > will >> > >> > > > > also >> > >> > > > > > > find it much easier for people to translate your >> application >> > >> if >> > >> > > they >> > >> > > > > have >> > >> > > > > > > everything they need in the 1 .po file vs looking for the >> text >> > >> > > related >> > >> > > > > to a >> > >> > > > > > > place holder. >> > >> > >> > > > > > > -- >> > >> > > > > > > /** >> > >> > > > > > > * @author Larry E. Masters >> > >> > > > > > > * @var string $userName >> > >> > > > > > > * @param string $realName >> > >> > > > > > > * @returns string aka PhpNut >> > >> > > > > > > * @access public >> > >> > > > > > > */ >> > >> > >> > > > > > > On Tue, Oct 13, 2009 at 9:13 AM, Rob <rob...@catchit.pl> >> > >> wrote: >> > >> > >> > > > > > > > Any1 thought about creating little snippet which could >> speed >> > >> up >> > >> > > > > > > > hardcoded localization process. >> > >> > > > > > > > Here is the simple scenerio: >> > >> > > > > > > > 1) find strings within __('...') __('...',true) string >> > >> patterns >> > >> > > in / >> > >> > > > > > > > app folder >> > >> > > > > > > > 2) build arrays from default locale *.po files >> containing >> > >> locale >> > >> > > keys >> > >> > > > > > > > 3) append to end of these files missing id keys in >> form: >> > >> > > > > > > > msgid "_register_disclaimer" >> > >> > > > > > > > msgstr "TOODOO" >> > >> > >> > > > > > > > i create many multilang apps and i believe it could be >> major >> > >> > > speed >> > >> > > > > > > > boost for ppl like me. >> > >> > > > > > > > we dont need to update these files manually every time >> we >> > >> use >> > >> > > __(). >> > >> > > > > we >> > >> > > > > > > > just run script when app is ready or changed and just >> update >> > >> > > TOODOO >> > >> > > > > > > > strings or send them to translators. >> > >> > >> > > > > > > > If some1 came up with idea how this could be easly done >> i >> > >> would >> > >> > > > > > > > apreciate this. >> > >> > >> > > > > > > > regular expressions? if so, how to build fault free >> one? >> >> >> >> --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "CakePHP" group. To post to this group, send email to cake-php@googlegroups.com To unsubscribe from this group, send email to cake-php+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/cake-php?hl=en -~----------~----~----~----~------~----~------~--~---