1
0
mirror of https://github.com/fzaninotto/Faker.git synced 2025-03-24 09:19:50 +01:00

introducing locales

This commit is contained in:
Francois Zaninotto 2011-10-15 11:23:31 +02:00
parent aa6f9386d9
commit 0d1ee8c09d
5 changed files with 46 additions and 15 deletions

View File

@ -3,23 +3,54 @@
namespace Faker;
require_once __DIR__ . '/Generator.php';
require_once __DIR__ . '/Provider/Name.php';
require_once __DIR__ . '/Provider/Address.php';
require_once __DIR__ . '/Provider/PhoneNumber.php';
require_once __DIR__ . '/Provider/Company.php';
require_once __DIR__ . '/Provider/Lorem.php';
class Factory
{
public static function create()
const DEFAULT_LOCALE = 'en_US';
protected static $defaultProviders = array('Name', 'Address', 'PhoneNumber', 'Company', 'Lorem');
public static function create($locale = self::DEFAULT_LOCALE)
{
$generator = new Generator();
$generator->addProvider(new Provider\Name($generator));
$generator->addProvider(new Provider\Address($generator));
$generator->addProvider(new Provider\PhoneNumber($generator));
$generator->addProvider(new Provider\Company($generator));
$generator->addProvider(new Provider\Lorem($generator));
foreach (static::$defaultProviders as $provider) {
$providerClassName = self::getProviderClassname($provider, $locale);
$generator->addProvider(new $providerClassName($generator));
}
return $generator;
}
protected function getProviderClassname($provider, $locale = '')
{
if ($providerClass = self::findProviderClassname($provider, $locale)) {
return $providerClass;
}
// fallback to default locale
if ($providerClass = self::findProviderClassname($provider, static::DEFAULT_LOCALE)) {
return $providerClass;
}
// fallback to no locale
$providerClass = self::findProviderClassname($provider);
if (class_exists($providerClass)) {
return $providerClass;
}
throw new \InvalidArgumentException(sprintf('Unable to find provider "%s" with locale "%s"', $provider, $locale));
}
protected static function findProviderClassname($provider, $locale = '')
{
$providerName = $locale ? sprintf('Provider\%s\%s', $locale, $provider) : sprintf('Provider\%s', $provider);
$providerClass = 'Faker\\' . $providerName;
echo $providerClass, "\n";
if (class_exists($providerClass)) {
return $providerClass;
}
$providerClassPath = __DIR__ . '/' . str_replace('\\', '/', $providerName) . '.php';
echo $providerClassPath, "\n";
if (file_exists($providerClassPath)) {
require $providerClassPath;
return $providerClass;
}
}
}

View File

@ -1,6 +1,6 @@
<?php
namespace Faker\Provider;
namespace Faker\Provider\en_US;
class Address
{

View File

@ -1,6 +1,6 @@
<?php
namespace Faker\Provider;
namespace Faker\Provider\en_US;
class Company
{

View File

@ -1,6 +1,6 @@
<?php
namespace Faker\Provider;
namespace Faker\Provider\en_US;
class Name
{

View File

@ -1,6 +1,6 @@
<?php
namespace Faker\Provider;
namespace Faker\Provider\en_US;
class PhoneNumber
{