public static function get($locale = null)
    {
        $locale_object = null;

        if ($locale === null) {
            $locale_key = self::setlocale(LC_ALL, '0');
            if (array_key_exists($locale_key, self::$locales)) {
                $locale_object = self::$locales[$locale_key];
            }
        } elseif (is_array($locale)) {
            foreach ($locale as $locale_key) {
                if (array_key_exists($locale_key, self::$locales)) {
                    $locale_object = self::$locales[$locale_key];
                    break;
                }
            }
        } else {
            if (array_key_exists($locale, self::$locales)) {
                $locale_object = self::$locales[$locale];
            }
        }

        if ($locale_object === null) {
            $locale_object = new SwatI18NLocale($locale);
            if ($locale === null) {
                $locale_key = $locale_object->__toString();
                self::$locales[$locale_key] = $locale_object;
            } elseif (is_array($locale)) {
                foreach ($locale as $locale_key) {
                    self::$locales[$locale_key] = $locale_object;
                }
            } else {
                self::$locales[$locale] = $locale_object;
            }
        }

        return $locale_object;
    }