How can I localize strings in cakePhp? I havent had any success with the online documentation. Thanks for any help.
                +1 
                A: 
                
                
              There are a couple of steps:
- First, set the locale to be used
- Create one or more .pofiles for that language
- Wrap all of your l10n-able strings with the __()or__d()helper methods
Here's an excerpt from one of my projects:
# app/app_controller.php
uses ( 'L10n' );
class AppController extends Controller {
  public function beforeFilter() {
    /**
     * Derive the desired locale by reading the subdomain from
     * the HTTP_HOST server variable. Locale subdomains can use
     * either the 2 or 3 character ISO code. Information on locale
     * ISO codes is at http://www.loc.gov/standards/iso639-2/php/code_list.php.
     */
    $this->L10n = new L10n();
    /** Auto-detect the request language settings */
    $this->L10n->get();
    /**
     * Set the default "domain" for translations. The domain is the
     * same as the po file name in a given locale directory. e.g.
     * __d( 'homepage', 'message_id' ) would look for the
     * message_id key in homepage.po. Using the __() convenience
     * function will always look in default.po.
     */
    $this->set( 'domain', 'default' );
  }
  # The rest of your AppController code
}
That snippet will set the language. All you need to do is provide the appropriate .po files in the /app/locale/eng/LC_MESSAGES/ directory. The CakePHP book provides sufficient information on this, I think.
If you choose to use just one .po file, you'll wrap your strings with the __() helper. I chose multiple .po files in order to avoid one massive file, so I used the __d() helper so that I could specify which domain (domain == name of the .po file without the .po extension).
UPDATE
I should add that you'll need to use the Translate behavior to help you with database content that requires translation.
                  Rob Wilkerson
                   2010-04-18 12:06:39
                
              You do not need to instantiate the `L10n` class at all. This happens automatically the first time the `__()` function is invoked.
                  deceze
                   2010-04-19 06:00:17
                Interesting. I did not know that, but since I'm using it here to `get()` the language, wouldn't I need an instance before any `__()` is evaluated?
                  Rob Wilkerson
                   2010-04-19 11:24:37
                No, this is all being done when you invoke `__()`. You can try by baking a new Cake app and just add a single `__('Test')` somewhere, provide a translation .po file for the string and switch your browsers preferred language setting. It'll switch languages without you needing to do anything more.
                  deceze
                   2010-04-20 00:07:44
                There is no way how to change default "domain", __() always uses default domain.
                  sstevko
                   2010-08-10 11:09:16