From ebda65504bbb1e9f9ef603bbfa1039ca6f5525f5 Mon Sep 17 00:00:00 2001 From: "Anew_G." Date: Fri, 20 Feb 2015 15:30:47 +0800 Subject: [PATCH 001/127] Update ShippingOrder.php --- Behavioral/State/ShippingOrder.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Behavioral/State/ShippingOrder.php b/Behavioral/State/ShippingOrder.php index 025ac32..fdc699d 100644 --- a/Behavioral/State/ShippingOrder.php +++ b/Behavioral/State/ShippingOrder.php @@ -44,6 +44,6 @@ class ShippingOrder implements OrderInterface $this->order['updatedTime'] = time(); // Setting the new order status into database; - return $this->updateOrder($order); + return $this->updateOrder($this->order); } } From 3570576eb0baae34b2f187ddf264a8a1a4c460a6 Mon Sep 17 00:00:00 2001 From: Mayurkumar Vandra Date: Sun, 1 Mar 2015 13:38:17 -0500 Subject: [PATCH 002/127] Including Exception Test --- Creational/StaticFactory/Tests/StaticFactoryTest.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Creational/StaticFactory/Tests/StaticFactoryTest.php b/Creational/StaticFactory/Tests/StaticFactoryTest.php index e8bb7a5..f0304ca 100644 --- a/Creational/StaticFactory/Tests/StaticFactoryTest.php +++ b/Creational/StaticFactory/Tests/StaticFactoryTest.php @@ -27,4 +27,12 @@ class StaticFactoryTest extends \PHPUnit_Framework_TestCase $obj = StaticFactory::factory($type); $this->assertInstanceOf('DesignPatterns\Creational\StaticFactory\FormatterInterface', $obj); } + + /** + * @expectedException InvalidArgumentException + */ + public function testException() + { + StaticFactory::factory(""); + } } From 9bfa7687ded691a87367e74da6eb9e0f84355dc8 Mon Sep 17 00:00:00 2001 From: Mayurkumar Vandra Date: Sun, 1 Mar 2015 18:01:49 -0500 Subject: [PATCH 003/127] Updated a Typo in Builder - Director Test --- Creational/Builder/Tests/DirectorTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Creational/Builder/Tests/DirectorTest.php b/Creational/Builder/Tests/DirectorTest.php index 90cdb39..33e853e 100644 --- a/Creational/Builder/Tests/DirectorTest.php +++ b/Creational/Builder/Tests/DirectorTest.php @@ -30,7 +30,7 @@ class DirectorTest extends \PHPUnit_Framework_TestCase /** * Here we test the build process. Notice that the client don't know - * anything about the contrete builder. + * anything about the concrete builder. * * @dataProvider getBuilder */ From 53f4d364c064d568ef7d808186e4b7765195d168 Mon Sep 17 00:00:00 2001 From: ftwbzhao Date: Sat, 7 Mar 2015 14:11:42 +0800 Subject: [PATCH 004/127] fix booklist remove function --- Behavioral/Iterator/BookList.php | 2 +- Behavioral/Iterator/Tests/IteratorTest.php | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Behavioral/Iterator/BookList.php b/Behavioral/Iterator/BookList.php index 0dda925..6fcf265 100644 --- a/Behavioral/Iterator/BookList.php +++ b/Behavioral/Iterator/BookList.php @@ -25,7 +25,7 @@ class BookList implements \Countable public function removeBook(Book $bookToRemove) { - foreach ($this as $key => $book) { + foreach ($this->books as $key => $book) { /** @var Book $book */ if ($book->getAuthorAndTitle() === $bookToRemove->getAuthorAndTitle()) { unset($this->books[$key]); diff --git a/Behavioral/Iterator/Tests/IteratorTest.php b/Behavioral/Iterator/Tests/IteratorTest.php index 2e117d8..2c5acd9 100644 --- a/Behavioral/Iterator/Tests/IteratorTest.php +++ b/Behavioral/Iterator/Tests/IteratorTest.php @@ -63,4 +63,13 @@ class IteratorTest extends \PHPUnit_Framework_TestCase $iterator->next(); } } + + /** + * Test BookList Remove + */ + public function testBookRemove() + { + $this->bookList->removeBook($this->bookList->getBook(0)); + $this->assertEquals($this->bookList->count(), 2); + } } From 18071865afbd5664e2c98ac30488932e3b2f4a48 Mon Sep 17 00:00:00 2001 From: dingoEgret Date: Thu, 26 Mar 2015 13:10:16 -0400 Subject: [PATCH 005/127] Update Colleague.php --- Behavioral/Mediator/Colleague.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Behavioral/Mediator/Colleague.php b/Behavioral/Mediator/Colleague.php index 36dea5d..c0ff248 100644 --- a/Behavioral/Mediator/Colleague.php +++ b/Behavioral/Mediator/Colleague.php @@ -14,13 +14,7 @@ abstract class Colleague * @var MediatorInterface */ private $mediator; - - // for subclasses - protected function getMediator() - { - return $this->mediator; - } - + /** * @param MediatorInterface $medium */ @@ -29,4 +23,10 @@ abstract class Colleague // in this way, we are sure the concrete colleague knows the mediator $this->mediator = $medium; } + + // for subclasses + protected function getMediator() + { + return $this->mediator; + } } From f8be5643c64601daa242f18cb209bc8bc3321756 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Votruba?= Date: Fri, 27 Mar 2015 07:02:24 +0100 Subject: [PATCH 006/127] travis: PHP 5.6 and 7.0 nightly added + other improvements - `--dev` is by default for almost a year - don't hide `phpunit`, make it explicit --- .travis.yml | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1eada0b..f7edf14 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,19 +1,22 @@ language: php + php: - 5.3 - 5.4 - 5.5 + - 5.6 + - 7.0 - hhvm -before_script: - - composer self-update - - composer install --prefer-source --no-interaction --dev - -branches: - only: - - master - matrix: allow_failures: - php: hhvm + - php: 7.0 fast_finish: true + +before_script: + - composer self-update + - composer install --prefer-source --no-interaction + +script: + - phpunit From 47891e6bd8e1dba4c56375a7db8b5f62d3106aae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Votruba?= Date: Fri, 27 Mar 2015 07:10:14 +0100 Subject: [PATCH 007/127] composer: bump to PHPUnit 4.6 --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index a857431..a754501 100644 --- a/composer.json +++ b/composer.json @@ -9,7 +9,7 @@ ], "minimum-stability": "stable", "require-dev": { - "phpunit/phpunit": "3.7.*", + "phpunit/phpunit": "4.6.*", "squizlabs/php_codesniffer": "1.5.*" }, "autoload": { From 2bc3d20e5e232f448ce8403c96a351ab11f258cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nils=20R=C3=BCckmann?= Date: Fri, 27 Mar 2015 12:19:20 +0100 Subject: [PATCH 008/127] codestyle - remove trailing whitespaces --- Behavioral/Command/HelloCommand.php | 2 +- Behavioral/NullObject/LoggerInterface.php | 2 +- Behavioral/NullObject/NullLogger.php | 2 +- Behavioral/Observer/User.php | 2 +- Behavioral/Observer/UserObserver.php | 2 +- Behavioral/Specification/Either.php | 6 +++--- Behavioral/Specification/Item.php | 4 ++-- Behavioral/Specification/Not.php | 6 +++--- Behavioral/TemplateMethod/Journey.php | 2 +- Behavioral/Visitor/RoleVisitorInterface.php | 8 ++++---- Creational/AbstractFactory/AbstractFactory.php | 4 ++-- .../AbstractFactory/Tests/AbstractFactoryTest.php | 4 ++-- Creational/Builder/BikeBuilder.php | 1 - Creational/Builder/Director.php | 4 ++-- Creational/Builder/Parts/Bike.php | 1 - Creational/Builder/Parts/Car.php | 1 - Creational/Builder/Parts/Door.php | 1 - Creational/Builder/Parts/Engine.php | 1 - Creational/Builder/Parts/Wheel.php | 1 - Creational/Builder/Tests/DirectorTest.php | 2 +- Creational/FactoryMethod/FactoryMethod.php | 10 +++++----- Creational/FactoryMethod/Porsche.php | 1 - Creational/Multiton/Multiton.php | 5 +---- Creational/Pool/Tests/TestWorker.php | 2 +- Creational/Prototype/BarBookPrototype.php | 1 - Creational/Prototype/FooBookPrototype.php | 1 - Creational/SimpleFactory/Bicycle.php | 1 - Creational/SimpleFactory/ConcreteFactory.php | 2 +- Creational/SimpleFactory/Scooter.php | 1 - Creational/Singleton/Singleton.php | 4 ---- Creational/StaticFactory/FormatNumber.php | 1 - Creational/StaticFactory/FormatString.php | 1 - Creational/StaticFactory/FormatterInterface.php | 1 - More/Repository/PostRepository.php | 4 ++-- Structural/Adapter/Book.php | 2 -- Structural/Adapter/EBookAdapter.php | 2 +- Structural/Adapter/Kindle.php | 2 -- Structural/Decorator/Decorator.php | 2 +- Structural/Decorator/Tests/DecoratorTest.php | 2 +- Structural/Facade/Facade.php | 2 +- Structural/FluentInterface/Sql.php | 2 +- 41 files changed, 40 insertions(+), 65 deletions(-) diff --git a/Behavioral/Command/HelloCommand.php b/Behavioral/Command/HelloCommand.php index 3dd55b1..eb630ed 100644 --- a/Behavioral/Command/HelloCommand.php +++ b/Behavioral/Command/HelloCommand.php @@ -4,7 +4,7 @@ namespace DesignPatterns\Behavioral\Command; /** * This concrete command calls "print" on the Receiver, but an external - * invoker just know he can call "execute" + * invoker just know he can call "execute" */ class HelloCommand implements CommandInterface { diff --git a/Behavioral/NullObject/LoggerInterface.php b/Behavioral/NullObject/LoggerInterface.php index 250c5a3..216d838 100644 --- a/Behavioral/NullObject/LoggerInterface.php +++ b/Behavioral/NullObject/LoggerInterface.php @@ -4,7 +4,7 @@ namespace DesignPatterns\Behavioral\NullObject; /** * LoggerInterface is a contract for logging something - * + * * Key feature: NullLogger MUST inherit from this interface like any other Loggers */ interface LoggerInterface diff --git a/Behavioral/NullObject/NullLogger.php b/Behavioral/NullObject/NullLogger.php index 49ff51e..a4bf469 100644 --- a/Behavioral/NullObject/NullLogger.php +++ b/Behavioral/NullObject/NullLogger.php @@ -5,7 +5,7 @@ namespace DesignPatterns\Behavioral\NullObject; /** * Performance concerns : ok there is a call for nothing but we spare an "if is_null" * I didn't run a benchmark but I think it's equivalent. - * + * * Key feature : of course this logger MUST implement the same interface (or abstract) * like the other loggers. */ diff --git a/Behavioral/Observer/User.php b/Behavioral/Observer/User.php index b7ffd19..013f194 100644 --- a/Behavioral/Observer/User.php +++ b/Behavioral/Observer/User.php @@ -4,7 +4,7 @@ namespace DesignPatterns\Behavioral\Observer; /** * Observer pattern : The observed object (the subject) - * + * * The subject maintains a list of Observers and sends notifications. * */ diff --git a/Behavioral/Observer/UserObserver.php b/Behavioral/Observer/UserObserver.php index 444a0eb..f444604 100644 --- a/Behavioral/Observer/UserObserver.php +++ b/Behavioral/Observer/UserObserver.php @@ -10,7 +10,7 @@ class UserObserver implements \SplObserver /** * This is the only method to implement as an observer. * It is called by the Subject (usually by SplSubject::notify() ) - * + * * @param \SplSubject $subject */ public function update(\SplSubject $subject) diff --git a/Behavioral/Specification/Either.php b/Behavioral/Specification/Either.php index 3479460..bb7ef01 100644 --- a/Behavioral/Specification/Either.php +++ b/Behavioral/Specification/Either.php @@ -12,7 +12,7 @@ class Either extends AbstractSpecification /** * A composite wrapper of two specifications - * + * * @param SpecificationInterface $left * @param SpecificationInterface $right */ @@ -24,9 +24,9 @@ class Either extends AbstractSpecification /** * Returns the evaluation of both wrapped specifications as a logical OR - * + * * @param Item $item - * + * * @return bool */ public function isSatisfiedBy(Item $item) diff --git a/Behavioral/Specification/Item.php b/Behavioral/Specification/Item.php index 5889587..ff24a50 100644 --- a/Behavioral/Specification/Item.php +++ b/Behavioral/Specification/Item.php @@ -10,7 +10,7 @@ class Item /** * An item must have a price - * + * * @param int $price */ public function __construct($price) @@ -20,7 +20,7 @@ class Item /** * Get the items price - * + * * @return int */ public function getPrice() diff --git a/Behavioral/Specification/Not.php b/Behavioral/Specification/Not.php index 64b5c10..6cf578c 100644 --- a/Behavioral/Specification/Not.php +++ b/Behavioral/Specification/Not.php @@ -11,7 +11,7 @@ class Not extends AbstractSpecification /** * Creates a new specification wrapping another - * + * * @param SpecificationInterface $spec */ public function __construct(SpecificationInterface $spec) @@ -21,9 +21,9 @@ class Not extends AbstractSpecification /** * Returns the negated result of the wrapped specification - * + * * @param Item $item - * + * * @return bool */ public function isSatisfiedBy(Item $item) diff --git a/Behavioral/TemplateMethod/Journey.php b/Behavioral/TemplateMethod/Journey.php index fbf79d4..cec9a7d 100644 --- a/Behavioral/TemplateMethod/Journey.php +++ b/Behavioral/TemplateMethod/Journey.php @@ -10,7 +10,7 @@ abstract class Journey /** * This is the public service provided by this class and its subclasses. * Notice it is final to "freeze" the global behavior of algorithm. - * If you want to override this contract, make an interface with only takeATrip() + * If you want to override this contract, make an interface with only takeATrip() * and subclass it. */ final public function takeATrip() diff --git a/Behavioral/Visitor/RoleVisitorInterface.php b/Behavioral/Visitor/RoleVisitorInterface.php index 3c9e24a..b007b13 100644 --- a/Behavioral/Visitor/RoleVisitorInterface.php +++ b/Behavioral/Visitor/RoleVisitorInterface.php @@ -6,10 +6,10 @@ namespace DesignPatterns\Behavioral\Visitor; * Visitor Pattern * * The contract for the visitor. - * + * * Note 1 : in C++ or java, with method polymorphism based on type-hint, there are many * methods visit() with different type for the 'role' parameter. - * + * * Note 2 : the visitor must not choose itself which method to * invoke, it is the Visitee that make this decision. */ @@ -17,14 +17,14 @@ interface RoleVisitorInterface { /** * Visit a User object - * + * * @param \DesignPatterns\Behavioral\Visitor\User $role */ public function visitUser(User $role); /** * Visit a Group object - * + * * @param \DesignPatterns\Behavioral\Visitor\Group $role */ public function visitGroup(Group $role); diff --git a/Creational/AbstractFactory/AbstractFactory.php b/Creational/AbstractFactory/AbstractFactory.php index 84b4203..49982e5 100644 --- a/Creational/AbstractFactory/AbstractFactory.php +++ b/Creational/AbstractFactory/AbstractFactory.php @@ -21,7 +21,7 @@ abstract class AbstractFactory { /** * Creates a text component - * + * * @param string $content * * @return Text @@ -30,7 +30,7 @@ abstract class AbstractFactory /** * Creates a picture component - * + * * @param string $path * @param string $name * diff --git a/Creational/AbstractFactory/Tests/AbstractFactoryTest.php b/Creational/AbstractFactory/Tests/AbstractFactoryTest.php index 9c61f96..b51394a 100644 --- a/Creational/AbstractFactory/Tests/AbstractFactoryTest.php +++ b/Creational/AbstractFactory/Tests/AbstractFactoryTest.php @@ -21,9 +21,9 @@ class AbstractFactoryTest extends \PHPUnit_Framework_TestCase /** * This is the client of factories. Note that the client does not - * care which factory is given to him, he can create any component he + * care which factory is given to him, he can create any component he * wants and render how he wants. - * + * * @dataProvider getFactories */ public function testComponentCreation(AbstractFactory $factory) diff --git a/Creational/Builder/BikeBuilder.php b/Creational/Builder/BikeBuilder.php index 477e1ad..53d53d3 100644 --- a/Creational/Builder/BikeBuilder.php +++ b/Creational/Builder/BikeBuilder.php @@ -17,7 +17,6 @@ class BikeBuilder implements BuilderInterface */ public function addDoors() { - } /** diff --git a/Creational/Builder/Director.php b/Creational/Builder/Director.php index 0c11877..d7f3aa3 100644 --- a/Creational/Builder/Director.php +++ b/Creational/Builder/Director.php @@ -4,8 +4,8 @@ namespace DesignPatterns\Creational\Builder; /** * Director is part of the builder pattern. It knows the interface of the builder - * and builds a complex object with the help of the builder. - * + * and builds a complex object with the help of the builder. + * * You can also inject many builders instead of one to build more complex objects */ class Director diff --git a/Creational/Builder/Parts/Bike.php b/Creational/Builder/Parts/Bike.php index 307b3e0..6efefe9 100644 --- a/Creational/Builder/Parts/Bike.php +++ b/Creational/Builder/Parts/Bike.php @@ -7,5 +7,4 @@ namespace DesignPatterns\Creational\Builder\Parts; */ class Bike extends Vehicle { - } diff --git a/Creational/Builder/Parts/Car.php b/Creational/Builder/Parts/Car.php index a18b301..1d4496c 100644 --- a/Creational/Builder/Parts/Car.php +++ b/Creational/Builder/Parts/Car.php @@ -7,5 +7,4 @@ namespace DesignPatterns\Creational\Builder\Parts; */ class Car extends Vehicle { - } diff --git a/Creational/Builder/Parts/Door.php b/Creational/Builder/Parts/Door.php index aa08772..526d41b 100644 --- a/Creational/Builder/Parts/Door.php +++ b/Creational/Builder/Parts/Door.php @@ -7,5 +7,4 @@ namespace DesignPatterns\Creational\Builder\Parts; */ class Door { - } diff --git a/Creational/Builder/Parts/Engine.php b/Creational/Builder/Parts/Engine.php index 08d5bd0..0b2fad0 100644 --- a/Creational/Builder/Parts/Engine.php +++ b/Creational/Builder/Parts/Engine.php @@ -7,5 +7,4 @@ namespace DesignPatterns\Creational\Builder\Parts; */ class Engine { - } diff --git a/Creational/Builder/Parts/Wheel.php b/Creational/Builder/Parts/Wheel.php index 19ef7c3..7fb60fd 100644 --- a/Creational/Builder/Parts/Wheel.php +++ b/Creational/Builder/Parts/Wheel.php @@ -7,5 +7,4 @@ namespace DesignPatterns\Creational\Builder\Parts; */ class Wheel { - } diff --git a/Creational/Builder/Tests/DirectorTest.php b/Creational/Builder/Tests/DirectorTest.php index 33e853e..0520bfe 100644 --- a/Creational/Builder/Tests/DirectorTest.php +++ b/Creational/Builder/Tests/DirectorTest.php @@ -31,7 +31,7 @@ class DirectorTest extends \PHPUnit_Framework_TestCase /** * Here we test the build process. Notice that the client don't know * anything about the concrete builder. - * + * * @dataProvider getBuilder */ public function testBuild(BuilderInterface $builder) diff --git a/Creational/FactoryMethod/FactoryMethod.php b/Creational/FactoryMethod/FactoryMethod.php index e4f3771..dd24b15 100644 --- a/Creational/FactoryMethod/FactoryMethod.php +++ b/Creational/FactoryMethod/FactoryMethod.php @@ -13,20 +13,20 @@ abstract class FactoryMethod /** * The children of the class must implement this method - * + * * Sometimes this method can be public to get "raw" object - * + * * @param string $type a generic type - * + * * @return VehicleInterface a new vehicle */ abstract protected function createVehicle($type); /** * Creates a new vehicle - * + * * @param int $type - * + * * @return VehicleInterface a new vehicle */ public function create($type) diff --git a/Creational/FactoryMethod/Porsche.php b/Creational/FactoryMethod/Porsche.php index 818a082..cba25ce 100644 --- a/Creational/FactoryMethod/Porsche.php +++ b/Creational/FactoryMethod/Porsche.php @@ -26,6 +26,5 @@ class Porsche implements VehicleInterface */ public function addTuningAMG() { - } } diff --git a/Creational/Multiton/Multiton.php b/Creational/Multiton/Multiton.php index e10c513..44f1ef0 100644 --- a/Creational/Multiton/Multiton.php +++ b/Creational/Multiton/Multiton.php @@ -32,13 +32,12 @@ class Multiton */ private function __construct() { - } /** * gets the instance with the given name, e.g. Multiton::INSTANCE_1 * uses lazy initialization - * + * * @param string $instanceName * * @return Multiton @@ -59,7 +58,6 @@ class Multiton */ private function __clone() { - } /** @@ -69,6 +67,5 @@ class Multiton */ private function __wakeup() { - } } diff --git a/Creational/Pool/Tests/TestWorker.php b/Creational/Pool/Tests/TestWorker.php index 7c2c2db..3cfbef5 100644 --- a/Creational/Pool/Tests/TestWorker.php +++ b/Creational/Pool/Tests/TestWorker.php @@ -1,4 +1,4 @@ - Date: Thu, 2 Apr 2015 00:02:43 +0200 Subject: [PATCH 009/127] create read-the-docs.sh --- read-the-docs.sh | 52 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100755 read-the-docs.sh diff --git a/read-the-docs.sh b/read-the-docs.sh new file mode 100755 index 0000000..e868670 --- /dev/null +++ b/read-the-docs.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +# Step 1 use pandoc to convert README.md to index.rst +find . -type f -name "README.md" \ + -execdir pandoc -f markdown -t rst -s -o "index.rst" {} \; \ +# -delete + +# Step 2 move uml/* of every pattern to images/path_to_pattern/uml/* +#find . -type d -name "uml" \ +# -exec bash -c 'mkdir -p images/${1:2}' funcname {} \; \ +# -exec bash -c 'mv ${1}/* images/${1:2}' funcname {} \; \ +# -delete + +# Step 3 change the content of index.rst +# embed php files in index.rst +for INDEX in $(find . -type f -name "index.rst") +do + # fix figure to image, add align center + sed -i "s|.. figure::|.. image::|g" ${INDEX} + sed -i "/:alt:/{n;d}" ${INDEX} + sed -i "s| Alt.*| :align: center|" ${INDEX} + + BASEDIR=$(dirname ${INDEX}) + + # fix image path uml/uml.png to images/path_to_pattern/uml/uml.png + # sed -i "s|uml/uml.png|/images/${BASEDIR:2}/uml/uml.png|g" ${INDEX} + + # embed pattern files + echo -e "\nCode\n----\n" >> ${INDEX} + echo -e "You can also find these code on \`GitHub\`_\n" >> ${INDEX} + + for PHPFILE in $(find ${BASEDIR} -maxdepth 1 -type f -name "*.php") + do + echo -e "$(basename ${PHPFILE})\n" >> ${INDEX} + echo -e ".. literalinclude:: $(basename ${PHPFILE})\n :language: php\n :linenos:\n" >> ${INDEX} + done + + # embed test files + echo -e "Test\n----\n" >> ${INDEX} + + for TESTFILE in $(find ${BASEDIR}/Tests -maxdepth 1 -type f -name "*.php") + do + echo -e "Tests/$(basename ${TESTFILE})\n" >> ${INDEX} + echo -e ".. literalinclude:: Tests/$(basename ${TESTFILE})\n :language: php\n :linenos:\n" >> ${INDEX} + done + + # add link on GitHub of this pattern + echo -e ".. _\`GitHub\`: https://github.com/domnikl/DesignPatternsPHP/tree/master/${BASEDIR:2}" >> ${INDEX} +done + +# Step 4 embed other php files in index.rst +# fix TocTree of projet \ No newline at end of file From bba8b0df4321ed60c35b247201ff20bcf5deb8f5 Mon Sep 17 00:00:00 2001 From: Faust Date: Thu, 2 Apr 2015 00:03:33 +0200 Subject: [PATCH 010/127] execute read-the-docs.sh --- Behavioral/ChainOfResponsibilities/index.rst | 57 +++++++ Behavioral/Command/index.rst | 76 +++++++++ Behavioral/Iterator/index.rst | 69 +++++++++ Behavioral/Mediator/index.rst | 54 +++++++ Behavioral/Memento/index.rst | 67 ++++++++ Behavioral/NullObject/index.rst | 74 +++++++++ Behavioral/Observer/index.rst | 57 +++++++ Behavioral/Specification/index.rst | 75 +++++++++ Behavioral/State/index.rst | 56 +++++++ Behavioral/Strategy/index.rst | 70 +++++++++ Behavioral/TemplateMethod/index.rst | 63 ++++++++ Behavioral/Visitor/index.rst | 67 ++++++++ Behavioral/index.rst | 40 +++++ Creational/AbstractFactory/index.rst | 69 +++++++++ Creational/Builder/Parts/index.rst | 53 +++++++ Creational/Builder/index.rst | 68 +++++++++ Creational/FactoryMethod/index.rst | 82 ++++++++++ Creational/Multiton/index.rst | 40 +++++ Creational/Pool/index.rst | 69 +++++++++ Creational/Prototype/index.rst | 55 +++++++ Creational/SimpleFactory/index.rst | 60 ++++++++ Creational/Singleton/index.rst | 49 ++++++ Creational/StaticFactory/index.rst | 64 ++++++++ Creational/index.rst | 36 +++++ More/Delegation/index.rst | 53 +++++++ More/Repository/index.rst | 61 ++++++++ More/ServiceLocator/index.rst | 83 ++++++++++ More/index.rst | 18 +++ Structural/Adapter/index.rst | 70 +++++++++ Structural/Bridge/index.rst | 70 +++++++++ Structural/Composite/index.rst | 64 ++++++++ Structural/DataMapper/index.rst | 59 +++++++ Structural/Decorator/index.rst | 67 ++++++++ Structural/DependencyInjection/index.rst | 87 +++++++++++ Structural/Facade/index.rst | 65 ++++++++ Structural/FluentInterface/index.rst | 45 ++++++ Structural/Proxy/index.rst | 43 ++++++ Structural/Registry/index.rst | 46 ++++++ Structural/index.rst | 37 +++++ index.rst | 153 +++++++++++++++++++ 40 files changed, 2491 insertions(+) create mode 100644 Behavioral/ChainOfResponsibilities/index.rst create mode 100644 Behavioral/Command/index.rst create mode 100644 Behavioral/Iterator/index.rst create mode 100644 Behavioral/Mediator/index.rst create mode 100644 Behavioral/Memento/index.rst create mode 100644 Behavioral/NullObject/index.rst create mode 100644 Behavioral/Observer/index.rst create mode 100644 Behavioral/Specification/index.rst create mode 100644 Behavioral/State/index.rst create mode 100644 Behavioral/Strategy/index.rst create mode 100644 Behavioral/TemplateMethod/index.rst create mode 100644 Behavioral/Visitor/index.rst create mode 100644 Behavioral/index.rst create mode 100644 Creational/AbstractFactory/index.rst create mode 100644 Creational/Builder/Parts/index.rst create mode 100644 Creational/Builder/index.rst create mode 100644 Creational/FactoryMethod/index.rst create mode 100644 Creational/Multiton/index.rst create mode 100644 Creational/Pool/index.rst create mode 100644 Creational/Prototype/index.rst create mode 100644 Creational/SimpleFactory/index.rst create mode 100644 Creational/Singleton/index.rst create mode 100644 Creational/StaticFactory/index.rst create mode 100644 Creational/index.rst create mode 100644 More/Delegation/index.rst create mode 100644 More/Repository/index.rst create mode 100644 More/ServiceLocator/index.rst create mode 100644 More/index.rst create mode 100644 Structural/Adapter/index.rst create mode 100644 Structural/Bridge/index.rst create mode 100644 Structural/Composite/index.rst create mode 100644 Structural/DataMapper/index.rst create mode 100644 Structural/Decorator/index.rst create mode 100644 Structural/DependencyInjection/index.rst create mode 100644 Structural/Facade/index.rst create mode 100644 Structural/FluentInterface/index.rst create mode 100644 Structural/Proxy/index.rst create mode 100644 Structural/Registry/index.rst create mode 100644 Structural/index.rst create mode 100644 index.rst diff --git a/Behavioral/ChainOfResponsibilities/index.rst b/Behavioral/ChainOfResponsibilities/index.rst new file mode 100644 index 0000000..c838a29 --- /dev/null +++ b/Behavioral/ChainOfResponsibilities/index.rst @@ -0,0 +1,57 @@ +Chain Of Responsibilities +========================= + +Purpose: +-------- + +To build a chain of objects to handle a call in sequential order. If one +object cannot handle a call, it delegates the call to the next in the +chain and so forth. + +Examples: +--------- + +- logging framework, where each chain element decides autonomously what + to do with a log message +- a Spam filter +- Caching: first object is an instance of e.g. a Memcached Interface, + if that "misses" it delegates the call to the database interface +- Yii Framework: CFilterChain is a chain of controller action filters. + the executing point is passed from one filter to the next along the + chain, and only if all filters say "yes", the action can be invoked + at last. + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt ChainOfResponsibility UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +Handler.php + +.. literalinclude:: Handler.php + :language: php + :linenos: + +Request.php + +.. literalinclude:: Request.php + :language: php + :linenos: + +Test +---- + +Tests/ChainTest.php + +.. literalinclude:: Tests/ChainTest.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/ChainOfResponsibilities diff --git a/Behavioral/Command/index.rst b/Behavioral/Command/index.rst new file mode 100644 index 0000000..5056f13 --- /dev/null +++ b/Behavioral/Command/index.rst @@ -0,0 +1,76 @@ +Command +======= + +Purpose +------- + +To encapsulate invocation and decoupling. + +We have an Invoker and a Receiver. This pattern uses a "Command" to +delegate the method call against the Receiver and presents the same +method "execute". Therefore, the Invoker just knows to call "execute" to +process the Command of the client. The Receiver is decoupled from the +Invoker. + +The second aspect of this pattern is the undo(), which undoes the method +execute(). Command can also be aggregated to combine more complex +commands with minimum copy-paste and relying on composition over +inheritance. + +Examples +-------- + +- A text editor : all events are Command which can be undone, stacked + and saved. +- Symfony2: SF2 Commands that can be run from the CLI are built with + just the Command pattern in mind +- big CLI tools use subcommands to distribute various tasks and pack + them in "modules", each of these can be implemented with the Command + pattern (e.g. vagrant) + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt Command UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +HelloCommand.php + +.. literalinclude:: HelloCommand.php + :language: php + :linenos: + +Receiver.php + +.. literalinclude:: Receiver.php + :language: php + :linenos: + +CommandInterface.php + +.. literalinclude:: CommandInterface.php + :language: php + :linenos: + +Invoker.php + +.. literalinclude:: Invoker.php + :language: php + :linenos: + +Test +---- + +Tests/CommandTest.php + +.. literalinclude:: Tests/CommandTest.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Command diff --git a/Behavioral/Iterator/index.rst b/Behavioral/Iterator/index.rst new file mode 100644 index 0000000..6241bc8 --- /dev/null +++ b/Behavioral/Iterator/index.rst @@ -0,0 +1,69 @@ +Iterator +======== + +Purpose +------- + +To make an object iterable and to make it appear like a collection of +objects. + +Examples +-------- + +- to process a file line by line by just running over all lines (which + have an object representation) for a file (which of course is an + object, too) + +Note +---- + +Standard PHP Library (SPL) defines an interface Iterator which is best +suited for this! Often you would want to implement the Countable +interface too, to allow ``count($object)`` on your iterable object + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt Iterator UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +BookList.php + +.. literalinclude:: BookList.php + :language: php + :linenos: + +BookListReverseIterator.php + +.. literalinclude:: BookListReverseIterator.php + :language: php + :linenos: + +BookListIterator.php + +.. literalinclude:: BookListIterator.php + :language: php + :linenos: + +Book.php + +.. literalinclude:: Book.php + :language: php + :linenos: + +Test +---- + +Tests/IteratorTest.php + +.. literalinclude:: Tests/IteratorTest.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Iterator diff --git a/Behavioral/Mediator/index.rst b/Behavioral/Mediator/index.rst new file mode 100644 index 0000000..7df0287 --- /dev/null +++ b/Behavioral/Mediator/index.rst @@ -0,0 +1,54 @@ +Mediator +======== + +Purpose +------- + +This pattern provides an easy to decouple many components working +together. It is a good alternative over Observer IF you have a "central +intelligence", like a controller (but not in the sense of the MVC). + +All components (called Colleague) are only coupled to the +MediatorInterface and it is a good thing because in OOP, one good friend +is better than many. This is the key-feature of this pattern. + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt Mediator UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +MediatorInterface.php + +.. literalinclude:: MediatorInterface.php + :language: php + :linenos: + +Mediator.php + +.. literalinclude:: Mediator.php + :language: php + :linenos: + +Colleague.php + +.. literalinclude:: Colleague.php + :language: php + :linenos: + +Test +---- + +Tests/MediatorTest.php + +.. literalinclude:: Tests/MediatorTest.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Mediator diff --git a/Behavioral/Memento/index.rst b/Behavioral/Memento/index.rst new file mode 100644 index 0000000..9d28f27 --- /dev/null +++ b/Behavioral/Memento/index.rst @@ -0,0 +1,67 @@ +Memento +======= + +Purpose +------- + +Provide the ability to restore an object to its previous state (undo via +rollback). + +The memento pattern is implemented with three objects: the originator, a +caretaker and a memento. The originator is some object that has an +internal state. The caretaker is going to do something to the +originator, but wants to be able to undo the change. The caretaker first +asks the originator for a memento object. Then it does whatever +operation (or sequence of operations) it was going to do. To roll back +to the state before the operations, it returns the memento object to the +originator. The memento object itself is an opaque object (one which the +caretaker cannot, or should not, change). When using this pattern, care +should be taken if the originator may change other objects or resources +- the memento pattern operates on a single object. + +Examples +-------- + +- The seed of a pseudorandom number generator +- The state in a finite state machine + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt Momento UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +Caretaker.php + +.. literalinclude:: Caretaker.php + :language: php + :linenos: + +Memento.php + +.. literalinclude:: Memento.php + :language: php + :linenos: + +Originator.php + +.. literalinclude:: Originator.php + :language: php + :linenos: + +Test +---- + +Tests/MementoTest.php + +.. literalinclude:: Tests/MementoTest.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Memento diff --git a/Behavioral/NullObject/index.rst b/Behavioral/NullObject/index.rst new file mode 100644 index 0000000..eb13a56 --- /dev/null +++ b/Behavioral/NullObject/index.rst @@ -0,0 +1,74 @@ +Null Object +=========== + +Purpose +------- + +NullObject is not a GoF design pattern but a schema which appears +frequently enough to be considered a pattern. It has the following +benefits: + +- Client code is simplified +- Reduces the chance of null pointer exceptions +- Fewer conditionals require less test cases + +Methods that return an object or null should instead return an object or +``NullObject``. ``NullObject``\ s simplify boilerplate code such as +``if (!is_null($obj)) { $obj->callSomething(); }`` to just +``$obj->callSomething();`` by eliminating the conditional check in +client code. + +Examples +-------- + +- Symfony2: null logger of profiler +- Symfony2: null output in Symfony/Console +- null handler in a Chain of Responsibilities pattern +- null command in a Command pattern + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt NullObject UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +PrintLogger.php + +.. literalinclude:: PrintLogger.php + :language: php + :linenos: + +NullLogger.php + +.. literalinclude:: NullLogger.php + :language: php + :linenos: + +Service.php + +.. literalinclude:: Service.php + :language: php + :linenos: + +LoggerInterface.php + +.. literalinclude:: LoggerInterface.php + :language: php + :linenos: + +Test +---- + +Tests/LoggerTest.php + +.. literalinclude:: Tests/LoggerTest.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/NullObject diff --git a/Behavioral/Observer/index.rst b/Behavioral/Observer/index.rst new file mode 100644 index 0000000..c14c448 --- /dev/null +++ b/Behavioral/Observer/index.rst @@ -0,0 +1,57 @@ +Observer +======== + +Purpose +------- + +To implement a publish/subscribe behaviour to an object, whenever a +"Subject" object changes it's state, the attached "Observers" will be +notified. It is used to shorten the amount of coupled objects and uses +loose coupling instead. + +Examples +-------- + +- a message queue system is observed to show the progress of a job in a + GUI + +Note +---- + +PHP already defines two interfaces that can help to implement this +pattern: SplObserver and SplSubject. + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt Observer UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +UserObserver.php + +.. literalinclude:: UserObserver.php + :language: php + :linenos: + +User.php + +.. literalinclude:: User.php + :language: php + :linenos: + +Test +---- + +Tests/ObserverTest.php + +.. literalinclude:: Tests/ObserverTest.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Observer diff --git a/Behavioral/Specification/index.rst b/Behavioral/Specification/index.rst new file mode 100644 index 0000000..6923159 --- /dev/null +++ b/Behavioral/Specification/index.rst @@ -0,0 +1,75 @@ +Specification +============= + +Purpose +------- + +Builds a clear specification of business rules, where objects can be +checked against. The composite specification class has one method called +``isSatisfiedBy`` that returns either true or false depending on whether +the given object satisfies the specification. + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt Specification UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +Either.php + +.. literalinclude:: Either.php + :language: php + :linenos: + +PriceSpecification.php + +.. literalinclude:: PriceSpecification.php + :language: php + :linenos: + +SpecificationInterface.php + +.. literalinclude:: SpecificationInterface.php + :language: php + :linenos: + +AbstractSpecification.php + +.. literalinclude:: AbstractSpecification.php + :language: php + :linenos: + +Item.php + +.. literalinclude:: Item.php + :language: php + :linenos: + +Plus.php + +.. literalinclude:: Plus.php + :language: php + :linenos: + +Not.php + +.. literalinclude:: Not.php + :language: php + :linenos: + +Test +---- + +Tests/SpecificationTest.php + +.. literalinclude:: Tests/SpecificationTest.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Specification diff --git a/Behavioral/State/index.rst b/Behavioral/State/index.rst new file mode 100644 index 0000000..0b679c2 --- /dev/null +++ b/Behavioral/State/index.rst @@ -0,0 +1,56 @@ +State +===== + +Purpose +------- + +Encapsulate varying behavior for the same routine based on an object's +state. This can be a cleaner way for an object to change its behavior at +runtime without resorting to large monolithic conditional statements. + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt State UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +OrderInterface.php + +.. literalinclude:: OrderInterface.php + :language: php + :linenos: + +OrderFactory.php + +.. literalinclude:: OrderFactory.php + :language: php + :linenos: + +OrderController.php + +.. literalinclude:: OrderController.php + :language: php + :linenos: + +ShippingOrder.php + +.. literalinclude:: ShippingOrder.php + :language: php + :linenos: + +CreateOrder.php + +.. literalinclude:: CreateOrder.php + :language: php + :linenos: + +Test +---- + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/State diff --git a/Behavioral/Strategy/index.rst b/Behavioral/Strategy/index.rst new file mode 100644 index 0000000..c1a2fe3 --- /dev/null +++ b/Behavioral/Strategy/index.rst @@ -0,0 +1,70 @@ +Strategy +======== + +Terminology: +------------ + +- Context +- Strategy +- Concrete Strategy + +Purpose +------- + +To separate strategies and to enable fast switching between them. Also +this pattern is a good alternative to inheritance (instead of having an +abstract class that is extended). + +Examples +-------- + +- sorting a list of objects, one strategy by date, the other by id +- simplify unit testing: e.g. switching between file and in-memory + storage + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt Strategy UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +DateComparator.php + +.. literalinclude:: DateComparator.php + :language: php + :linenos: + +IdComparator.php + +.. literalinclude:: IdComparator.php + :language: php + :linenos: + +ObjectCollection.php + +.. literalinclude:: ObjectCollection.php + :language: php + :linenos: + +ComparatorInterface.php + +.. literalinclude:: ComparatorInterface.php + :language: php + :linenos: + +Test +---- + +Tests/StrategyTest.php + +.. literalinclude:: Tests/StrategyTest.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Strategy diff --git a/Behavioral/TemplateMethod/index.rst b/Behavioral/TemplateMethod/index.rst new file mode 100644 index 0000000..f3be5bc --- /dev/null +++ b/Behavioral/TemplateMethod/index.rst @@ -0,0 +1,63 @@ +Template Method +=============== + +Purpose +------- + +Template Method is a behavioral design pattern. + +Perhaps you have encountered it many times already. The idea is to let +subclasses of this abstract template "finish" the behavior of an +algorithm. + +A.k.a the "Hollywood principle": "Don't call us, we call you." This +class is not called by subclasses but the inverse. How? With abstraction +of course. + +In other words, this is a skeleton of algorithm, well-suited for +framework libraries. The user has just to implement one method and the +superclass do the job. + +It is an easy way to decouple concrete classes and reduce copy-paste, +that's why you'll find it everywhere. + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt TemplateMethod UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +CityJourney.php + +.. literalinclude:: CityJourney.php + :language: php + :linenos: + +Journey.php + +.. literalinclude:: Journey.php + :language: php + :linenos: + +BeachJourney.php + +.. literalinclude:: BeachJourney.php + :language: php + :linenos: + +Test +---- + +Tests/JourneyTest.php + +.. literalinclude:: Tests/JourneyTest.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/TemplateMethod diff --git a/Behavioral/Visitor/index.rst b/Behavioral/Visitor/index.rst new file mode 100644 index 0000000..85fb280 --- /dev/null +++ b/Behavioral/Visitor/index.rst @@ -0,0 +1,67 @@ +Visitor +======= + +Purpose +------- + +The Visitor Pattern lets you outsource operations on objects to other +objects. The main reason to do this is to keep a separation of concerns. +But classes have to define a contract to allow visitors (the +``Role::accept`` method in the example). + +The contract is an abstract class but you can have also a clean +interface. In that case, each Visitor has to choose itself which method +to invoke on the visitor. + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt Visitor UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +Group.php + +.. literalinclude:: Group.php + :language: php + :linenos: + +Role.php + +.. literalinclude:: Role.php + :language: php + :linenos: + +RolePrintVisitor.php + +.. literalinclude:: RolePrintVisitor.php + :language: php + :linenos: + +User.php + +.. literalinclude:: User.php + :language: php + :linenos: + +RoleVisitorInterface.php + +.. literalinclude:: RoleVisitorInterface.php + :language: php + :linenos: + +Test +---- + +Tests/VisitorTest.php + +.. literalinclude:: Tests/VisitorTest.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Visitor diff --git a/Behavioral/index.rst b/Behavioral/index.rst new file mode 100644 index 0000000..5691a0d --- /dev/null +++ b/Behavioral/index.rst @@ -0,0 +1,40 @@ +Behavioral +========== + +In software engineering, behavioral design patterns are design patterns +that identify common communication patterns between objects and realize +these patterns. By doing so, these patterns increase flexibility in +carrying out this communication. + +- `ChainOfResponsibilities `__ + `:notebook: `__ +- `Command `__ + `:notebook: `__ +- `Iterator `__ + `:notebook: `__ +- `Mediator `__ + `:notebook: `__ +- `NullObject `__ + `:notebook: `__ +- `Observer `__ + `:notebook: `__ +- `Specification `__ + `:notebook: `__ +- `State `__ + `:notebook: `__ +- `Strategy `__ + `:notebook: `__ +- `TemplateMethod `__ + `:notebook: `__ +- `Visitor `__ + `:notebook: `__ + +Code +---- + +You can also find these code on `GitHub`_ + +Test +---- + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral diff --git a/Creational/AbstractFactory/index.rst b/Creational/AbstractFactory/index.rst new file mode 100644 index 0000000..707968c --- /dev/null +++ b/Creational/AbstractFactory/index.rst @@ -0,0 +1,69 @@ +Abstract Factory +================ + +Purpose +------- + +To create series of related or dependent objects without specifying +their concrete classes. Usually the created classes all implement the +same interface. The client of the abstract factory does not care about +how these objects are created, he just knows how they go together. + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt AbstractFactory UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +Text.php + +.. literalinclude:: Text.php + :language: php + :linenos: + +JsonFactory.php + +.. literalinclude:: JsonFactory.php + :language: php + :linenos: + +AbstractFactory.php + +.. literalinclude:: AbstractFactory.php + :language: php + :linenos: + +MediaInterface.php + +.. literalinclude:: MediaInterface.php + :language: php + :linenos: + +HtmlFactory.php + +.. literalinclude:: HtmlFactory.php + :language: php + :linenos: + +Picture.php + +.. literalinclude:: Picture.php + :language: php + :linenos: + +Test +---- + +Tests/AbstractFactoryTest.php + +.. literalinclude:: Tests/AbstractFactoryTest.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/AbstractFactory diff --git a/Creational/Builder/Parts/index.rst b/Creational/Builder/Parts/index.rst new file mode 100644 index 0000000..8760de0 --- /dev/null +++ b/Creational/Builder/Parts/index.rst @@ -0,0 +1,53 @@ +Purpose +======= + +Examples +======== + +- + +Code +---- + +You can also find these code on `GitHub`_ + +Wheel.php + +.. literalinclude:: Wheel.php + :language: php + :linenos: + +Door.php + +.. literalinclude:: Door.php + :language: php + :linenos: + +Car.php + +.. literalinclude:: Car.php + :language: php + :linenos: + +Bike.php + +.. literalinclude:: Bike.php + :language: php + :linenos: + +Vehicle.php + +.. literalinclude:: Vehicle.php + :language: php + :linenos: + +Engine.php + +.. literalinclude:: Engine.php + :language: php + :linenos: + +Test +---- + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/Builder/Parts diff --git a/Creational/Builder/index.rst b/Creational/Builder/index.rst new file mode 100644 index 0000000..b636e01 --- /dev/null +++ b/Creational/Builder/index.rst @@ -0,0 +1,68 @@ +Builder +======= + +Purpose +------- + +Builder is an interface that build parts of a complex object. + +Sometimes, if the builder has a better knowledge of what it builds, this +interface could be an abstract class with default methods (aka adapter). + +If you have a complex inheritance tree for objects, it is logical to +have a complex inheritance tree for builders too. + +Note: Builders have often a fluent interface, see the mock builder of +PHPUnit for example. + +Examples +-------- + +- PHPUnit: Mock Builder + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt Builder UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +BuilderInterface.php + +.. literalinclude:: BuilderInterface.php + :language: php + :linenos: + +CarBuilder.php + +.. literalinclude:: CarBuilder.php + :language: php + :linenos: + +Director.php + +.. literalinclude:: Director.php + :language: php + :linenos: + +BikeBuilder.php + +.. literalinclude:: BikeBuilder.php + :language: php + :linenos: + +Test +---- + +Tests/DirectorTest.php + +.. literalinclude:: Tests/DirectorTest.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/Builder diff --git a/Creational/FactoryMethod/index.rst b/Creational/FactoryMethod/index.rst new file mode 100644 index 0000000..693321f --- /dev/null +++ b/Creational/FactoryMethod/index.rst @@ -0,0 +1,82 @@ +Factory Method +============== + +Purpose +------- + +The good point over the SimpleFactory is you can subclass it to +implement different ways to create objects + +For simple case, this abstract class could be just an interface + +This pattern is a "real" Design Pattern because it achieves the +"Dependency Inversion Principle" a.k.a the "D" in S.O.L.I.D principles. + +It means the FactoryMethod class depends on abstractions, not concrete +classes. This is the real trick compared to SimpleFactory or +StaticFactory. + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt FactoryMethod UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +Porsche.php + +.. literalinclude:: Porsche.php + :language: php + :linenos: + +GermanFactory.php + +.. literalinclude:: GermanFactory.php + :language: php + :linenos: + +ItalianFactory.php + +.. literalinclude:: ItalianFactory.php + :language: php + :linenos: + +VehicleInterface.php + +.. literalinclude:: VehicleInterface.php + :language: php + :linenos: + +FactoryMethod.php + +.. literalinclude:: FactoryMethod.php + :language: php + :linenos: + +Bicycle.php + +.. literalinclude:: Bicycle.php + :language: php + :linenos: + +Ferrari.php + +.. literalinclude:: Ferrari.php + :language: php + :linenos: + +Test +---- + +Tests/FactoryMethodTest.php + +.. literalinclude:: Tests/FactoryMethodTest.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/FactoryMethod diff --git a/Creational/Multiton/index.rst b/Creational/Multiton/index.rst new file mode 100644 index 0000000..66b8764 --- /dev/null +++ b/Creational/Multiton/index.rst @@ -0,0 +1,40 @@ +Multiton +======== + +**THIS IS CONSIDERED TO BE AN ANTI-PATTERN! FOR BETTER TESTABILITY AND +MAINTAINABILITY USE DEPENDENCY INJECTION!** + +Purpose +======= + +To have only a list of named instances that are used, like a singleton +but with n instances. + +Examples +======== + +- 2 DB Connectors, e.g. one for MySQL, the other for SQLite +- multiple Loggers (one for debug messages, one for errors) + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt Multiton UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +Multiton.php + +.. literalinclude:: Multiton.php + :language: php + :linenos: + +Test +---- + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/Multiton diff --git a/Creational/Pool/index.rst b/Creational/Pool/index.rst new file mode 100644 index 0000000..30d3be0 --- /dev/null +++ b/Creational/Pool/index.rst @@ -0,0 +1,69 @@ +Pool +==== + +The **object pool pattern** is a software creational design pattern that +uses a set of initialized objects kept ready to use – a "pool" – rather +than allocating and destroying them on demand. A client of the pool will +request an object from the pool and perform operations on the returned +object. When the client has finished, it returns the object, which is a +specific type of factory object, to the pool rather than destroying it. + +Object pooling can offer a significant performance boost in situations +where the cost of initializing a class instance is high, the rate of +instantiation of a class is high, and the number of instances in use at +any one time is low. The pooled object is obtained in predictable time +when creation of the new objects (especially over network) may take +variable time. + +However these benefits are mostly true for objects that are expensive +with respect to time, such as database connections, socket connections, +threads and large graphic objects like fonts or bitmaps. In certain +situations, simple object pooling (that hold no external resources, but +only occupy memory) may not be efficient and could decrease performance. + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt Pool UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +Pool.php + +.. literalinclude:: Pool.php + :language: php + :linenos: + +Processor.php + +.. literalinclude:: Processor.php + :language: php + :linenos: + +Worker.php + +.. literalinclude:: Worker.php + :language: php + :linenos: + +Test +---- + +Tests/TestWorker.php + +.. literalinclude:: Tests/TestWorker.php + :language: php + :linenos: + +Tests/PoolTest.php + +.. literalinclude:: Tests/PoolTest.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/Pool diff --git a/Creational/Prototype/index.rst b/Creational/Prototype/index.rst new file mode 100644 index 0000000..31a98a3 --- /dev/null +++ b/Creational/Prototype/index.rst @@ -0,0 +1,55 @@ +Prototype +========= + +Purpose +------- + +To avoid the cost of creating objects the standard way (new Foo()) and +instead create a prototype and clone it. + +Examples +-------- + +- Large amounts of data (e.g. create 1,000,000 rows in a database at + once via a ORM). + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt Prototype UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +BookPrototype.php + +.. literalinclude:: BookPrototype.php + :language: php + :linenos: + +BarBookPrototype.php + +.. literalinclude:: BarBookPrototype.php + :language: php + :linenos: + +index.php + +.. literalinclude:: index.php + :language: php + :linenos: + +FooBookPrototype.php + +.. literalinclude:: FooBookPrototype.php + :language: php + :linenos: + +Test +---- + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/Prototype diff --git a/Creational/SimpleFactory/index.rst b/Creational/SimpleFactory/index.rst new file mode 100644 index 0000000..ff55711 --- /dev/null +++ b/Creational/SimpleFactory/index.rst @@ -0,0 +1,60 @@ +Simple Factory +============== + +Purpose +------- + +ConcreteFactory is a simple factory pattern. + +It differs from the static factory because it is NOT static and as you +know: static => global => evil! + +Therefore, you can have multiple factories, differently parametrized, +you can subclass it and you can mock-up it. + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt SimpleFactory UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +ConcreteFactory.php + +.. literalinclude:: ConcreteFactory.php + :language: php + :linenos: + +VehicleInterface.php + +.. literalinclude:: VehicleInterface.php + :language: php + :linenos: + +Scooter.php + +.. literalinclude:: Scooter.php + :language: php + :linenos: + +Bicycle.php + +.. literalinclude:: Bicycle.php + :language: php + :linenos: + +Test +---- + +Tests/SimpleFactoryTest.php + +.. literalinclude:: Tests/SimpleFactoryTest.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/SimpleFactory diff --git a/Creational/Singleton/index.rst b/Creational/Singleton/index.rst new file mode 100644 index 0000000..7393782 --- /dev/null +++ b/Creational/Singleton/index.rst @@ -0,0 +1,49 @@ +Singleton +========= + +**THIS IS CONSIDERED TO BE AN ANTI-PATTERN! FOR BETTER TESTABILITY AND +MAINTAINABILITY USE DEPENDENCY INJECTION!** + +Purpose +------- + +To have only one instance of this object in the application that will +handle all calls. + +Examples +-------- + +- DB Connector +- Logger (may also be a Multiton if there are many log files for + several purposes) +- Lock file for the application (there is only one in the filesystem + ...) + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt Singleton UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +Singleton.php + +.. literalinclude:: Singleton.php + :language: php + :linenos: + +Test +---- + +Tests/SingletonTest.php + +.. literalinclude:: Tests/SingletonTest.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/Singleton diff --git a/Creational/StaticFactory/index.rst b/Creational/StaticFactory/index.rst new file mode 100644 index 0000000..85cacf7 --- /dev/null +++ b/Creational/StaticFactory/index.rst @@ -0,0 +1,64 @@ +Static Factory +============== + +Purpose +------- + +Similar to the AbstractFactory, this pattern is used to create series of +related or dependent objects. The difference between this and the +abstract factory pattern is that the static factory pattern uses just +one static method to create all types of objects it can create. It is +usually named ``factory`` or ``build``. + +Examples +-------- + +- Zend Framework: ``Zend_Cache_Backend`` or ``_Frontend`` use a factory + method create cache backends or frontends + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt StaticFactory UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +StaticFactory.php + +.. literalinclude:: StaticFactory.php + :language: php + :linenos: + +FormatterInterface.php + +.. literalinclude:: FormatterInterface.php + :language: php + :linenos: + +FormatString.php + +.. literalinclude:: FormatString.php + :language: php + :linenos: + +FormatNumber.php + +.. literalinclude:: FormatNumber.php + :language: php + :linenos: + +Test +---- + +Tests/StaticFactoryTest.php + +.. literalinclude:: Tests/StaticFactoryTest.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/StaticFactory diff --git a/Creational/index.rst b/Creational/index.rst new file mode 100644 index 0000000..1e34638 --- /dev/null +++ b/Creational/index.rst @@ -0,0 +1,36 @@ +Creational +========== + +In software engineering, creational design patterns are design patterns +that deal with object creation mechanisms, trying to create objects in a +manner suitable to the situation. The basic form of object creation +could result in design problems or added complexity to the design. +Creational design patterns solve this problem by somehow controlling +this object creation. + +- `AbstractFactory `__ + `:notebook: `__ +- `Builder `__ + `:notebook: `__ +- `FactoryMethod `__ + `:notebook: `__ +- `Multiton `__ (is considered an anti-pattern! :no\_entry:) +- `Pool `__ + `:notebook: `__ +- `Prototype `__ + `:notebook: `__ +- `SimpleFactory `__ +- `Singleton `__ + `:notebook: `__ (is + considered an anti-pattern! :no\_entry:) +- `StaticFactory `__ + +Code +---- + +You can also find these code on `GitHub`_ + +Test +---- + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational diff --git a/More/Delegation/index.rst b/More/Delegation/index.rst new file mode 100644 index 0000000..873f3e2 --- /dev/null +++ b/More/Delegation/index.rst @@ -0,0 +1,53 @@ +Delegation +========== + +Purpose +------- + +... + +Examples +-------- + +... + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt Delegation UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +Usage.php + +.. literalinclude:: Usage.php + :language: php + :linenos: + +TeamLead.php + +.. literalinclude:: TeamLead.php + :language: php + :linenos: + +JuniorDeveloper.php + +.. literalinclude:: JuniorDeveloper.php + :language: php + :linenos: + +Test +---- + +Tests/DelegationTest.php + +.. literalinclude:: Tests/DelegationTest.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/More/Delegation diff --git a/More/Repository/index.rst b/More/Repository/index.rst new file mode 100644 index 0000000..504be8b --- /dev/null +++ b/More/Repository/index.rst @@ -0,0 +1,61 @@ +Repository +========== + +Purpose +------- + +Mediates between the domain and data mapping layers using a +collection-like interface for accessing domain objects. Repository +encapsulates the set of objects persisted in a data store and the +operations performed over them, providing a more object-oriented view of +the persistence layer. Repository also supports the objective of +achieving a clean separation and one-way dependency between the domain +and data mapping layers. + +Examples +-------- + +- Doctrine 2 ORM: there is Repository that mediates between Entity and + DBAL and contains methods to retrieve objects +- Laravel Framework + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt Repository UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +PostRepository.php + +.. literalinclude:: PostRepository.php + :language: php + :linenos: + +Post.php + +.. literalinclude:: Post.php + :language: php + :linenos: + +MemoryStorage.php + +.. literalinclude:: MemoryStorage.php + :language: php + :linenos: + +Storage.php + +.. literalinclude:: Storage.php + :language: php + :linenos: + +Test +---- + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/More/Repository diff --git a/More/ServiceLocator/index.rst b/More/ServiceLocator/index.rst new file mode 100644 index 0000000..96bad04 --- /dev/null +++ b/More/ServiceLocator/index.rst @@ -0,0 +1,83 @@ +Service Locator +=============== + +Purpose +------- + +To implement a loosely coupled architecture in order to get better +testable, maintainable and extendable code. DI pattern and Service +Locator pattern are an implementation of the Inverse of Control pattern. + +Usage +----- + +With ``ServiceLocator`` you can register a service for a given +interface. By using the interface you can retrieve the service and use +it in the classes of the application without knowing its implementation. +You can configure and inject the Service Locator object on bootstrap. + +Examples +-------- + +- Zend Framework 2 uses Service Locator to create and share services + used in the framework(i.e. EventManager, ModuleManager, all custom + user services provided by modules, etc...) + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt ServiceLocator UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +LogService.php + +.. literalinclude:: LogService.php + :language: php + :linenos: + +LogServiceInterface.php + +.. literalinclude:: LogServiceInterface.php + :language: php + :linenos: + +DatabaseServiceInterface.php + +.. literalinclude:: DatabaseServiceInterface.php + :language: php + :linenos: + +ServiceLocatorInterface.php + +.. literalinclude:: ServiceLocatorInterface.php + :language: php + :linenos: + +ServiceLocator.php + +.. literalinclude:: ServiceLocator.php + :language: php + :linenos: + +DatabaseService.php + +.. literalinclude:: DatabaseService.php + :language: php + :linenos: + +Test +---- + +Tests/ServiceLocatorTest.php + +.. literalinclude:: Tests/ServiceLocatorTest.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/More/ServiceLocator diff --git a/More/index.rst b/More/index.rst new file mode 100644 index 0000000..fd0cfb9 --- /dev/null +++ b/More/index.rst @@ -0,0 +1,18 @@ +More +==== + +- `Delegation `__ + `:notebook: `__ +- `ServiceLocator `__ + `:notebook: `__ +- `Repository `__ + +Code +---- + +You can also find these code on `GitHub`_ + +Test +---- + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/More diff --git a/Structural/Adapter/index.rst b/Structural/Adapter/index.rst new file mode 100644 index 0000000..5d843dd --- /dev/null +++ b/Structural/Adapter/index.rst @@ -0,0 +1,70 @@ +Adapter / Wrapper +================= + +Purpose +------- + +To translate one interface for a class into a compatible interface. An +adapter allows classes to work together that normally could not because +of incompatible interfaces by providing it's interface to clients while +using the original interface. + +Examples +-------- + +- DB Client libraries adapter +- using multiple different webservices and adapters normalize data so + that the outcome is the same for all + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt Adapter UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +PaperBookInterface.php + +.. literalinclude:: PaperBookInterface.php + :language: php + :linenos: + +EBookInterface.php + +.. literalinclude:: EBookInterface.php + :language: php + :linenos: + +EBookAdapter.php + +.. literalinclude:: EBookAdapter.php + :language: php + :linenos: + +Kindle.php + +.. literalinclude:: Kindle.php + :language: php + :linenos: + +Book.php + +.. literalinclude:: Book.php + :language: php + :linenos: + +Test +---- + +Tests/AdapterTest.php + +.. literalinclude:: Tests/AdapterTest.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Adapter diff --git a/Structural/Bridge/index.rst b/Structural/Bridge/index.rst new file mode 100644 index 0000000..e83c84c --- /dev/null +++ b/Structural/Bridge/index.rst @@ -0,0 +1,70 @@ +Purpose +------- + +Decouple an abstraction from its implementation so that the two can vary +independently. (http://en.wikipedia.org/wiki/Bridge\_pattern) + +Sample: +^^^^^^^ + +- `Symfony + DoctrineBridge `__ + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt Bridge UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +Assemble.php + +.. literalinclude:: Assemble.php + :language: php + :linenos: + +Workshop.php + +.. literalinclude:: Workshop.php + :language: php + :linenos: + +Car.php + +.. literalinclude:: Car.php + :language: php + :linenos: + +Motorcycle.php + +.. literalinclude:: Motorcycle.php + :language: php + :linenos: + +Vehicle.php + +.. literalinclude:: Vehicle.php + :language: php + :linenos: + +Produce.php + +.. literalinclude:: Produce.php + :language: php + :linenos: + +Test +---- + +Tests/BridgeTest.php + +.. literalinclude:: Tests/BridgeTest.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Bridge diff --git a/Structural/Composite/index.rst b/Structural/Composite/index.rst new file mode 100644 index 0000000..ad59cc2 --- /dev/null +++ b/Structural/Composite/index.rst @@ -0,0 +1,64 @@ +Composite +========= + +Purpose +======= + +To treat a group of objects the same way as a single instance of the +object. + +Examples +======== + +- a form class instance handles all its form elements like a single + instance of the form, when ``render()`` is called, it subsequently + runs through all its child elements and calls ``render()`` on them +- ``Zend_Config``: a tree of configuration options, each one is a + ``Zend_Config`` object itself + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt Composite UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +FormElement.php + +.. literalinclude:: FormElement.php + :language: php + :linenos: + +Form.php + +.. literalinclude:: Form.php + :language: php + :linenos: + +InputElement.php + +.. literalinclude:: InputElement.php + :language: php + :linenos: + +TextElement.php + +.. literalinclude:: TextElement.php + :language: php + :linenos: + +Test +---- + +Tests/CompositeTest.php + +.. literalinclude:: Tests/CompositeTest.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Composite diff --git a/Structural/DataMapper/index.rst b/Structural/DataMapper/index.rst new file mode 100644 index 0000000..cd51e7a --- /dev/null +++ b/Structural/DataMapper/index.rst @@ -0,0 +1,59 @@ +Data Mapper +=========== + +Purpose +------- + +A Data Mapper, is a Data Access Layer that performs bidirectional +transfer of data between a persistent data store (often a relational +database) and an in memory data representation (the domain layer). The +goal of the pattern is to keep the in memory representation and the +persistent data store independent of each other and the data mapper +itself. The layer is composed of one or more mappers (or Data Access +Objects), performing the data transfer. Mapper implementations vary in +scope. Generic mappers will handle many different domain entity types, +dedicated mappers will handle one or a few. + +The key point of this pattern is, unlike Active Record pattern, the data +model follows Single Responsibility Principle. + +Examples +-------- + +- DB Object Relational Mapper (ORM) : Doctrine2 uses DAO named as + "EntityRepository" + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt DataMapper UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +UserMapper.php + +.. literalinclude:: UserMapper.php + :language: php + :linenos: + +User.php + +.. literalinclude:: User.php + :language: php + :linenos: + +Test +---- + +Tests/DataMapperTest.php + +.. literalinclude:: Tests/DataMapperTest.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/DataMapper diff --git a/Structural/Decorator/index.rst b/Structural/Decorator/index.rst new file mode 100644 index 0000000..6ace194 --- /dev/null +++ b/Structural/Decorator/index.rst @@ -0,0 +1,67 @@ +Decorator +========= + +Purpose +------- + +To dynamically add new functionality to class instances. + +Examples +-------- + +- Zend Framework: decorators for ``Zend_Form_Element`` instances +- Web Service Layer: Decorators JSON and XML for a REST service (in + this case, only one of these should be allowed of course) + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt Decorator UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +RendererInterface.php + +.. literalinclude:: RendererInterface.php + :language: php + :linenos: + +RenderInXml.php + +.. literalinclude:: RenderInXml.php + :language: php + :linenos: + +Webservice.php + +.. literalinclude:: Webservice.php + :language: php + :linenos: + +RenderInJson.php + +.. literalinclude:: RenderInJson.php + :language: php + :linenos: + +Decorator.php + +.. literalinclude:: Decorator.php + :language: php + :linenos: + +Test +---- + +Tests/DecoratorTest.php + +.. literalinclude:: Tests/DecoratorTest.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Decorator diff --git a/Structural/DependencyInjection/index.rst b/Structural/DependencyInjection/index.rst new file mode 100644 index 0000000..544cc64 --- /dev/null +++ b/Structural/DependencyInjection/index.rst @@ -0,0 +1,87 @@ +Dependency Injection +==================== + +Purpose +------- + +To implement a loosely coupled architecture in order to get better +testable, maintainable and extendable code. + +Usage +----- + +Configuration gets injected and ``Connection`` will get all that it +needs from ``$config``. Without DI, the configuration would be created +directly in ``Connection``, which is not very good for testing and +extending ``Connection``. + +Notice we are following Inversion of control principle in ``Connection`` +by asking ``$config`` to implement ``Parameters`` interface. This +decouples our components. We don't care where the source of information +comes from, we only care that ``$config`` has certain methods to +retrieve that information. Read more about Inversion of control +`here `__. + +Examples +-------- + +- The Doctrine2 ORM uses dependency injection e.g. for configuration + that is injected into a ``Connection`` object. For testing purposes, + one can easily create a mock object of the configuration and inject + that into the ``Connection`` object +- Symfony and Zend Framework 2 already have containers for DI that + create objects via a configuration array and inject them where needed + (i.e. in Controllers) + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt DependencyInjection UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +Connection.php + +.. literalinclude:: Connection.php + :language: php + :linenos: + +ArrayConfig.php + +.. literalinclude:: ArrayConfig.php + :language: php + :linenos: + +AbstractConfig.php + +.. literalinclude:: AbstractConfig.php + :language: php + :linenos: + +Parameters.php + +.. literalinclude:: Parameters.php + :language: php + :linenos: + +Test +---- + +Tests/DependencyInjectionTest.php + +.. literalinclude:: Tests/DependencyInjectionTest.php + :language: php + :linenos: + +Tests/config.php + +.. literalinclude:: Tests/config.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/DependencyInjection diff --git a/Structural/Facade/index.rst b/Structural/Facade/index.rst new file mode 100644 index 0000000..6df49cc --- /dev/null +++ b/Structural/Facade/index.rst @@ -0,0 +1,65 @@ +Facade +====== + +Purpose +------- + +The primary goal of a Facade Pattern is not to avoid you to read the +manual of a complex API. It's only a side-effect. The first goal is to +reduce coupling and follow the Law of Demeter. + +A Facade is meant to decouple a client and a sub-system by embedding +many (but sometimes just one) interface, and of course to reduce +complexity. + +- A facade does not forbid you the access to the sub-system +- You can (you should) have multiple facades for one sub-system + +That's why a good facade has no ``new`` in it. If there are multiple +creations for each method, it is not a Facade, it's a Builder or a +[Abstract\|Static\|Simple] Factory [Method]. + +The best facade has no ``new`` and a constructor with +interface-type-hinted parameters. If you need creation of new instances, +use a Factory as argument. + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt Facade UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +OsInterface.php + +.. literalinclude:: OsInterface.php + :language: php + :linenos: + +Facade.php + +.. literalinclude:: Facade.php + :language: php + :linenos: + +BiosInterface.php + +.. literalinclude:: BiosInterface.php + :language: php + :linenos: + +Test +---- + +Tests/FacadeTest.php + +.. literalinclude:: Tests/FacadeTest.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Facade diff --git a/Structural/FluentInterface/index.rst b/Structural/FluentInterface/index.rst new file mode 100644 index 0000000..80adfbe --- /dev/null +++ b/Structural/FluentInterface/index.rst @@ -0,0 +1,45 @@ +Fluent Interface +================ + +Purpose +------- + +To write code that is easy readable just like sentences in a natural +language (like English). + +Examples +-------- + +- Doctrine2's QueryBuilder works something like that example class + below +- PHPUnit uses fluent interfaces to build mock objects +- Yii Framework: CDbCommand and CActiveRecord use this pattern, too + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt FluentInterface UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +Sql.php + +.. literalinclude:: Sql.php + :language: php + :linenos: + +Test +---- + +Tests/FluentInterfaceTest.php + +.. literalinclude:: Tests/FluentInterfaceTest.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/FluentInterface diff --git a/Structural/Proxy/index.rst b/Structural/Proxy/index.rst new file mode 100644 index 0000000..a7ce379 --- /dev/null +++ b/Structural/Proxy/index.rst @@ -0,0 +1,43 @@ +Proxy +===== + +Purpose +------- + +To interface to anything that is expensive or impossible to duplicate. + +Examples +-------- + +- Doctrine2 uses proxies to implement framework magic (e.g. lazy + initialization) in them, while the user still works with his own + entity classes and will never use nor touch the proxies + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt Proxy UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +RecordProxy.php + +.. literalinclude:: RecordProxy.php + :language: php + :linenos: + +Record.php + +.. literalinclude:: Record.php + :language: php + :linenos: + +Test +---- + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Proxy diff --git a/Structural/Registry/index.rst b/Structural/Registry/index.rst new file mode 100644 index 0000000..b63e1c6 --- /dev/null +++ b/Structural/Registry/index.rst @@ -0,0 +1,46 @@ +Registry +======== + +Purpose +------- + +To implement a central storage for objects often used throughout the +application, is typically implemented using an abstract class with only +static methods (or using the Singleton pattern) + +Examples +-------- + +- Zend Framework: ``Zend_Registry`` holds the application's logger + object, front controller etc. +- Yii Framework: ``CWebApplication`` holds all the application + components, such as ``CWebUser``, ``CUrlManager``, etc. + +UML Diagram +----------- + +.. image:: uml/uml.png + :alt: Alt Registry UML Diagram + :align: center + +Code +---- + +You can also find these code on `GitHub`_ + +Registry.php + +.. literalinclude:: Registry.php + :language: php + :linenos: + +Test +---- + +Tests/RegistryTest.php + +.. literalinclude:: Tests/RegistryTest.php + :language: php + :linenos: + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Registry diff --git a/Structural/index.rst b/Structural/index.rst new file mode 100644 index 0000000..49867ee --- /dev/null +++ b/Structural/index.rst @@ -0,0 +1,37 @@ +Structural +========== + +In Software Engineering, Structural Design Patterns are Design Patterns +that ease the design by identifying a simple way to realize +relationships between entities. + +- `Adapter `__ + `:notebook: `__ +- `Bridge `__ + `:notebook: `__ +- `Composite `__ + `:notebook: `__ +- `DataMapper `__ + `:notebook: `__ +- `Decorator `__ + `:notebook: `__ +- `DependencyInjection `__ + `:notebook: `__ +- `Facade `__ + `:notebook: `__ +- `FluentInterface `__ + `:notebook: `__ +- `Proxy `__ + `:notebook: `__ +- `Registry `__ + `:notebook: `__ + +Code +---- + +You can also find these code on `GitHub`_ + +Test +---- + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural diff --git a/index.rst b/index.rst new file mode 100644 index 0000000..d6bb000 --- /dev/null +++ b/index.rst @@ -0,0 +1,153 @@ +DesignPatternsPHP +================= + +|Build Status| + +This is a collection of known design patterns and some sample code how +to implement them in PHP. Every pattern has a small list of examples +(most of them from Zend Framework, Symfony2 or Doctrine2 as I'm most +familiar with this software). + +I think the problem with patterns is that often people do know them but +don't know when to apply which. + +Patterns +-------- + +The patterns can be structured in roughly three different categories. +Please click on the +`:notebook: `__ +for a full explanation of the pattern on Wikipedia. + +`Creational `__ +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +- `AbstractFactory `__ + `:notebook: `__ +- `Builder `__ + `:notebook: `__ +- `FactoryMethod `__ + `:notebook: `__ +- `Multiton `__ (is considered an anti-pattern! + :no\_entry:) +- `Pool `__ + `:notebook: `__ +- `Prototype `__ + `:notebook: `__ +- `SimpleFactory `__ +- `Singleton `__ + `:notebook: `__ (is + considered an anti-pattern! :no\_entry:) +- `StaticFactory `__ + +`Structural `__ +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +- `Adapter `__ + `:notebook: `__ +- `Bridge `__ + `:notebook: `__ +- `Composite `__ + `:notebook: `__ +- `DataMapper `__ + `:notebook: `__ +- `Decorator `__ + `:notebook: `__ +- `DependencyInjection `__ + `:notebook: `__ +- `Facade `__ + `:notebook: `__ +- `FluentInterface `__ + `:notebook: `__ +- `Proxy `__ + `:notebook: `__ +- `Registry `__ + `:notebook: `__ + +`Behavioral `__ +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +- `ChainOfResponsibilities `__ + `:notebook: `__ +- `Command `__ + `:notebook: `__ +- `Iterator `__ + `:notebook: `__ +- `Mediator `__ + `:notebook: `__ +- `Memento `__ + `:notebook: `__ +- `NullObject `__ + `:notebook: `__ +- `Observer `__ + `:notebook: `__ +- `Specification `__ + `:notebook: `__ +- `State `__ + `:notebook: `__ +- `Strategy `__ + `:notebook: `__ +- `TemplateMethod `__ + `:notebook: `__ +- `Visitor `__ + `:notebook: `__ + +`More `__ +~~~~~~~~~~~~~~~ + +- `Delegation `__ + `:notebook: `__ +- `ServiceLocator `__ + `:notebook: `__ +- `Repository `__ + +Contribute +---------- + +Please feel free to fork and extend existing or add your own examples +and send a pull request with your changes! To establish a consistent +code quality, please check your code using +`PHP\_CodeSniffer `__ +against `PSR2 +standard `__ +using ``./vendor/bin/phpcs -p --standard=PSR2 --ignore=vendor .``. + +License +------- + +(The MIT License) + +Copyright (c) 2014 Dominik Liebler and +`contributors `__ + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +.. |Build Status| image:: https://travis-ci.org/domnikl/DesignPatternsPHP.png?branch=master + :target: https://travis-ci.org/domnikl/DesignPatternsPHP + +Code +---- + +You can also find these code on `GitHub`_ + +Test +---- + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/ From 1f38f34fc9e33fdbadc50d254ec7f949cdd135d9 Mon Sep 17 00:00:00 2001 From: Faust Date: Thu, 2 Apr 2015 00:06:29 +0200 Subject: [PATCH 011/127] sphinx-quickstart --- Makefile | 192 ++++++++++++++++++++++++++++++++++++ conf.py | 284 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ index.rst | 2 + make.bat | 263 ++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 741 insertions(+) create mode 100644 Makefile create mode 100644 conf.py create mode 100644 make.bat diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..52169e6 --- /dev/null +++ b/Makefile @@ -0,0 +1,192 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = _build + +# User-friendly check for sphinx-build +ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) +$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) +endif + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest coverage gettext + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " applehelp to make an Apple Help Book" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " xml to make Docutils-native XML files" + @echo " pseudoxml to make pseudoxml-XML files for display purposes" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + @echo " coverage to run coverage check of the documentation (if enabled)" + +clean: + rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/DesignPatternsPHP.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/DesignPatternsPHP.qhc" + +applehelp: + $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp + @echo + @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." + @echo "N.B. You won't be able to view it unless you put it in" \ + "~/Library/Documentation/Help or install it in your application" \ + "bundle." + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/DesignPatternsPHP" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/DesignPatternsPHP" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +latexpdfja: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through platex and dvipdfmx..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." + +coverage: + $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage + @echo "Testing of coverage in the sources finished, look at the " \ + "results in $(BUILDDIR)/coverage/python.txt." + +xml: + $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml + @echo + @echo "Build finished. The XML files are in $(BUILDDIR)/xml." + +pseudoxml: + $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml + @echo + @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." diff --git a/conf.py b/conf.py new file mode 100644 index 0000000..5354e1f --- /dev/null +++ b/conf.py @@ -0,0 +1,284 @@ +# -*- coding: utf-8 -*- +# +# DesignPatternsPHP documentation build configuration file, created by +# sphinx-quickstart on Thu Apr 2 00:05:03 2015. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys +import os +import shlex + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +#sys.path.insert(0, os.path.abspath('.')) + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +#needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'DesignPatternsPHP' +copyright = u'2015, Dominik Liebler' +author = u'Dominik Liebler' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '1.0' +# The full version, including alpha/beta/rc tags. +release = '1.0' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ['_build'] + +# The reST default role (used for this markup: `text`) to use for all +# documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + +# If true, keep warnings as "system message" paragraphs in the built documents. +#keep_warnings = False + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +html_theme = 'sphinx-rtd-theme' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +#html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Add any extra paths that contain custom files (such as robots.txt or +# .htaccess) here, relative to this directory. These files are copied +# directly to the root of the documentation. +#html_extra_path = [] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Language to be used for generating the HTML full-text search index. +# Sphinx supports the following languages: +# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' +# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr' +#html_search_language = 'en' + +# A dictionary with options for the search language support, empty by default. +# Now only 'ja' uses this config value +#html_search_options = {'type': 'default'} + +# The name of a javascript file (relative to the configuration directory) that +# implements a search results scorer. If empty, the default will be used. +#html_search_scorer = 'scorer.js' + +# Output file base name for HTML help builder. +htmlhelp_basename = 'DesignPatternsPHPdoc' + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { +# The paper size ('letterpaper' or 'a4paper'). +#'papersize': 'letterpaper', + +# The font size ('10pt', '11pt' or '12pt'). +#'pointsize': '10pt', + +# Additional stuff for the LaTeX preamble. +#'preamble': '', + +# Latex figure (float) alignment +#'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'DesignPatternsPHP.tex', u'DesignPatternsPHP Documentation', + u'Dominik Liebler', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = True + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'designpatternsphp', u'DesignPatternsPHP Documentation', + [author], 1) +] + +# If true, show URL addresses after external links. +#man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'DesignPatternsPHP', u'DesignPatternsPHP Documentation', + author, 'DesignPatternsPHP', 'One line description of project.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +#texinfo_appendices = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' + +# If true, do not generate a @detailmenu in the "Top" node's menu. +#texinfo_no_detailmenu = False diff --git a/index.rst b/index.rst index d6bb000..b7f75a2 100644 --- a/index.rst +++ b/index.rst @@ -1,3 +1,5 @@ +.. DesignPatternsPHP + DesignPatternsPHP ================= diff --git a/make.bat b/make.bat new file mode 100644 index 0000000..fecc894 --- /dev/null +++ b/make.bat @@ -0,0 +1,263 @@ +@ECHO OFF + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set BUILDDIR=_build +set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . +set I18NSPHINXOPTS=%SPHINXOPTS% . +if NOT "%PAPER%" == "" ( + set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% + set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% +) + +if "%1" == "" goto help + +if "%1" == "help" ( + :help + echo.Please use `make ^` where ^ is one of + echo. html to make standalone HTML files + echo. dirhtml to make HTML files named index.html in directories + echo. singlehtml to make a single large HTML file + echo. pickle to make pickle files + echo. json to make JSON files + echo. htmlhelp to make HTML files and a HTML help project + echo. qthelp to make HTML files and a qthelp project + echo. devhelp to make HTML files and a Devhelp project + echo. epub to make an epub + echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter + echo. text to make text files + echo. man to make manual pages + echo. texinfo to make Texinfo files + echo. gettext to make PO message catalogs + echo. changes to make an overview over all changed/added/deprecated items + echo. xml to make Docutils-native XML files + echo. pseudoxml to make pseudoxml-XML files for display purposes + echo. linkcheck to check all external links for integrity + echo. doctest to run all doctests embedded in the documentation if enabled + echo. coverage to run coverage check of the documentation if enabled + goto end +) + +if "%1" == "clean" ( + for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i + del /q /s %BUILDDIR%\* + goto end +) + + +REM Check if sphinx-build is available and fallback to Python version if any +%SPHINXBUILD% 2> nul +if errorlevel 9009 goto sphinx_python +goto sphinx_ok + +:sphinx_python + +set SPHINXBUILD=python -m sphinx.__init__ +%SPHINXBUILD% 2> nul +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +:sphinx_ok + + +if "%1" == "html" ( + %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/html. + goto end +) + +if "%1" == "dirhtml" ( + %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. + goto end +) + +if "%1" == "singlehtml" ( + %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. + goto end +) + +if "%1" == "pickle" ( + %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the pickle files. + goto end +) + +if "%1" == "json" ( + %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the JSON files. + goto end +) + +if "%1" == "htmlhelp" ( + %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run HTML Help Workshop with the ^ +.hhp project file in %BUILDDIR%/htmlhelp. + goto end +) + +if "%1" == "qthelp" ( + %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run "qcollectiongenerator" with the ^ +.qhcp project file in %BUILDDIR%/qthelp, like this: + echo.^> qcollectiongenerator %BUILDDIR%\qthelp\DesignPatternsPHP.qhcp + echo.To view the help file: + echo.^> assistant -collectionFile %BUILDDIR%\qthelp\DesignPatternsPHP.ghc + goto end +) + +if "%1" == "devhelp" ( + %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. + goto end +) + +if "%1" == "epub" ( + %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The epub file is in %BUILDDIR%/epub. + goto end +) + +if "%1" == "latex" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "latexpdf" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + cd %BUILDDIR%/latex + make all-pdf + cd %~dp0 + echo. + echo.Build finished; the PDF files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "latexpdfja" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + cd %BUILDDIR%/latex + make all-pdf-ja + cd %~dp0 + echo. + echo.Build finished; the PDF files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "text" ( + %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The text files are in %BUILDDIR%/text. + goto end +) + +if "%1" == "man" ( + %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The manual pages are in %BUILDDIR%/man. + goto end +) + +if "%1" == "texinfo" ( + %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. + goto end +) + +if "%1" == "gettext" ( + %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The message catalogs are in %BUILDDIR%/locale. + goto end +) + +if "%1" == "changes" ( + %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes + if errorlevel 1 exit /b 1 + echo. + echo.The overview file is in %BUILDDIR%/changes. + goto end +) + +if "%1" == "linkcheck" ( + %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck + if errorlevel 1 exit /b 1 + echo. + echo.Link check complete; look for any errors in the above output ^ +or in %BUILDDIR%/linkcheck/output.txt. + goto end +) + +if "%1" == "doctest" ( + %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest + if errorlevel 1 exit /b 1 + echo. + echo.Testing of doctests in the sources finished, look at the ^ +results in %BUILDDIR%/doctest/output.txt. + goto end +) + +if "%1" == "coverage" ( + %SPHINXBUILD% -b coverage %ALLSPHINXOPTS% %BUILDDIR%/coverage + if errorlevel 1 exit /b 1 + echo. + echo.Testing of coverage in the sources finished, look at the ^ +results in %BUILDDIR%/coverage/python.txt. + goto end +) + +if "%1" == "xml" ( + %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The XML files are in %BUILDDIR%/xml. + goto end +) + +if "%1" == "pseudoxml" ( + %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. + goto end +) + +:end From 9d91da41539c2569e9ed3d170a20d6e15008b43d Mon Sep 17 00:00:00 2001 From: Faust Date: Thu, 2 Apr 2015 00:16:16 +0200 Subject: [PATCH 012/127] create TocTree index --- .gitignore | 1 + Behavioral/index.rst | 45 ++++++------------ Creational/Multiton/index.rst | 4 +- Creational/index.rst | 36 +++++--------- More/index.rst | 19 ++------ Structural/Bridge/index.rst | 3 ++ Structural/Composite/index.rst | 4 +- Structural/index.rst | 41 +++++----------- conf.py | 2 +- index.rst | 87 +++------------------------------- 10 files changed, 58 insertions(+), 184 deletions(-) diff --git a/.gitignore b/.gitignore index 601f317..1466a8e 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ .idea /nbproject /vendor/ +_build/ diff --git a/Behavioral/index.rst b/Behavioral/index.rst index 5691a0d..3513745 100644 --- a/Behavioral/index.rst +++ b/Behavioral/index.rst @@ -6,35 +6,18 @@ that identify common communication patterns between objects and realize these patterns. By doing so, these patterns increase flexibility in carrying out this communication. -- `ChainOfResponsibilities `__ - `:notebook: `__ -- `Command `__ - `:notebook: `__ -- `Iterator `__ - `:notebook: `__ -- `Mediator `__ - `:notebook: `__ -- `NullObject `__ - `:notebook: `__ -- `Observer `__ - `:notebook: `__ -- `Specification `__ - `:notebook: `__ -- `State `__ - `:notebook: `__ -- `Strategy `__ - `:notebook: `__ -- `TemplateMethod `__ - `:notebook: `__ -- `Visitor `__ - `:notebook: `__ +.. toctree:: + :titlesonly: -Code ----- - -You can also find these code on `GitHub`_ - -Test ----- - -.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral + ChainOfResponsibilities/index + Command/index + Iterator/index + Mediator/index + Memento/index + NullObject/index + Observer/index + Specification/index + State/index + Strategy/index + TemplateMethod/index + Visitor/index \ No newline at end of file diff --git a/Creational/Multiton/index.rst b/Creational/Multiton/index.rst index 66b8764..3f5167e 100644 --- a/Creational/Multiton/index.rst +++ b/Creational/Multiton/index.rst @@ -5,13 +5,13 @@ Multiton MAINTAINABILITY USE DEPENDENCY INJECTION!** Purpose -======= +------- To have only a list of named instances that are used, like a singleton but with n instances. Examples -======== +-------- - 2 DB Connectors, e.g. one for MySQL, the other for SQLite - multiple Loggers (one for debug messages, one for errors) diff --git a/Creational/index.rst b/Creational/index.rst index 1e34638..6d041a7 100644 --- a/Creational/index.rst +++ b/Creational/index.rst @@ -8,29 +8,15 @@ could result in design problems or added complexity to the design. Creational design patterns solve this problem by somehow controlling this object creation. -- `AbstractFactory `__ - `:notebook: `__ -- `Builder `__ - `:notebook: `__ -- `FactoryMethod `__ - `:notebook: `__ -- `Multiton `__ (is considered an anti-pattern! :no\_entry:) -- `Pool `__ - `:notebook: `__ -- `Prototype `__ - `:notebook: `__ -- `SimpleFactory `__ -- `Singleton `__ - `:notebook: `__ (is - considered an anti-pattern! :no\_entry:) -- `StaticFactory `__ +.. toctree:: + :titlesonly: -Code ----- - -You can also find these code on `GitHub`_ - -Test ----- - -.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational + AbstractFactory/index + Builder/index + FactoryMethod/index + Multiton/index + Pool/index + Prototype/index + SimpleFactory/index + Singleton/index + StaticFactory/index \ No newline at end of file diff --git a/More/index.rst b/More/index.rst index fd0cfb9..6ba85d3 100644 --- a/More/index.rst +++ b/More/index.rst @@ -1,18 +1,9 @@ More ==== -- `Delegation `__ - `:notebook: `__ -- `ServiceLocator `__ - `:notebook: `__ -- `Repository `__ +.. toctree:: + :titlesonly: -Code ----- - -You can also find these code on `GitHub`_ - -Test ----- - -.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/More + Delegation/index + ServiceLocator/index + Repository/index \ No newline at end of file diff --git a/Structural/Bridge/index.rst b/Structural/Bridge/index.rst index e83c84c..5fb8cfe 100644 --- a/Structural/Bridge/index.rst +++ b/Structural/Bridge/index.rst @@ -1,3 +1,6 @@ +Bridge +====== + Purpose ------- diff --git a/Structural/Composite/index.rst b/Structural/Composite/index.rst index ad59cc2..ff91f66 100644 --- a/Structural/Composite/index.rst +++ b/Structural/Composite/index.rst @@ -2,13 +2,13 @@ Composite ========= Purpose -======= +------- To treat a group of objects the same way as a single instance of the object. Examples -======== +-------- - a form class instance handles all its form elements like a single instance of the form, when ``render()`` is called, it subsequently diff --git a/Structural/index.rst b/Structural/index.rst index 49867ee..6505413 100644 --- a/Structural/index.rst +++ b/Structural/index.rst @@ -5,33 +5,16 @@ In Software Engineering, Structural Design Patterns are Design Patterns that ease the design by identifying a simple way to realize relationships between entities. -- `Adapter `__ - `:notebook: `__ -- `Bridge `__ - `:notebook: `__ -- `Composite `__ - `:notebook: `__ -- `DataMapper `__ - `:notebook: `__ -- `Decorator `__ - `:notebook: `__ -- `DependencyInjection `__ - `:notebook: `__ -- `Facade `__ - `:notebook: `__ -- `FluentInterface `__ - `:notebook: `__ -- `Proxy `__ - `:notebook: `__ -- `Registry `__ - `:notebook: `__ +.. toctree:: + :titlesonly: -Code ----- - -You can also find these code on `GitHub`_ - -Test ----- - -.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural + Adapter/index + Bridge/index + Composite/index + DataMapper/index + Decorator/index + DependencyInjection/index + Facade/index + FluentInterface/index + Proxy/index + Registry/index \ No newline at end of file diff --git a/conf.py b/conf.py index 5354e1f..c58ec9d 100644 --- a/conf.py +++ b/conf.py @@ -108,7 +108,7 @@ todo_include_todos = False # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. -html_theme = 'sphinx-rtd-theme' +html_theme = 'sphinx_rtd_theme' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the diff --git a/index.rst b/index.rst index b7f75a2..7911c10 100644 --- a/index.rst +++ b/index.rst @@ -21,87 +21,14 @@ Please click on the `:notebook: `__ for a full explanation of the pattern on Wikipedia. -`Creational `__ -~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.. toctree:: + :titlesonly: + :numbered: -- `AbstractFactory `__ - `:notebook: `__ -- `Builder `__ - `:notebook: `__ -- `FactoryMethod `__ - `:notebook: `__ -- `Multiton `__ (is considered an anti-pattern! - :no\_entry:) -- `Pool `__ - `:notebook: `__ -- `Prototype `__ - `:notebook: `__ -- `SimpleFactory `__ -- `Singleton `__ - `:notebook: `__ (is - considered an anti-pattern! :no\_entry:) -- `StaticFactory `__ - -`Structural `__ -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- `Adapter `__ - `:notebook: `__ -- `Bridge `__ - `:notebook: `__ -- `Composite `__ - `:notebook: `__ -- `DataMapper `__ - `:notebook: `__ -- `Decorator `__ - `:notebook: `__ -- `DependencyInjection `__ - `:notebook: `__ -- `Facade `__ - `:notebook: `__ -- `FluentInterface `__ - `:notebook: `__ -- `Proxy `__ - `:notebook: `__ -- `Registry `__ - `:notebook: `__ - -`Behavioral `__ -~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -- `ChainOfResponsibilities `__ - `:notebook: `__ -- `Command `__ - `:notebook: `__ -- `Iterator `__ - `:notebook: `__ -- `Mediator `__ - `:notebook: `__ -- `Memento `__ - `:notebook: `__ -- `NullObject `__ - `:notebook: `__ -- `Observer `__ - `:notebook: `__ -- `Specification `__ - `:notebook: `__ -- `State `__ - `:notebook: `__ -- `Strategy `__ - `:notebook: `__ -- `TemplateMethod `__ - `:notebook: `__ -- `Visitor `__ - `:notebook: `__ - -`More `__ -~~~~~~~~~~~~~~~ - -- `Delegation `__ - `:notebook: `__ -- `ServiceLocator `__ - `:notebook: `__ -- `Repository `__ + Creational/index + Structural/index + Behavioral/index + More/index Contribute ---------- From 795996e99351f14aef3956b46c6318862531e807 Mon Sep 17 00:00:00 2001 From: Faust Date: Thu, 2 Apr 2015 00:33:44 +0200 Subject: [PATCH 013/127] fix index --- index.rst | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/index.rst b/index.rst index 7911c10..bd254ec 100644 --- a/index.rst +++ b/index.rst @@ -3,7 +3,9 @@ DesignPatternsPHP ================= -|Build Status| +.. image:: https://readthedocs.org/projects/designpatterns-php/badge/?version=read-the-docs + :target: https://readthedocs.org/projects/designpatterns-php/?badge=read-the-docs + :alt: Documentation Status This is a collection of known design patterns and some sample code how to implement them in PHP. Every pattern has a small list of examples @@ -18,7 +20,7 @@ Patterns The patterns can be structured in roughly three different categories. Please click on the -`:notebook: `__ +`here `__ for a full explanation of the pattern on Wikipedia. .. toctree:: @@ -67,16 +69,3 @@ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -.. |Build Status| image:: https://travis-ci.org/domnikl/DesignPatternsPHP.png?branch=master - :target: https://travis-ci.org/domnikl/DesignPatternsPHP - -Code ----- - -You can also find these code on `GitHub`_ - -Test ----- - -.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/ From 6579a466a8e32526a21282afef8efe7aca5af1ce Mon Sep 17 00:00:00 2001 From: Faust Date: Thu, 2 Apr 2015 00:48:24 +0200 Subject: [PATCH 014/127] update badge doc --- index.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.rst b/index.rst index bd254ec..e3a755a 100644 --- a/index.rst +++ b/index.rst @@ -3,8 +3,8 @@ DesignPatternsPHP ================= -.. image:: https://readthedocs.org/projects/designpatterns-php/badge/?version=read-the-docs - :target: https://readthedocs.org/projects/designpatterns-php/?badge=read-the-docs +.. image:: https://readthedocs.org/projects/designpatterns-php/badge/?version=latest + :target: https://readthedocs.org/projects/designpatterns-php/?badge=latest :alt: Documentation Status This is a collection of known design patterns and some sample code how From eb65f82ef4972a8654a5c599066c03453fbffd9a Mon Sep 17 00:00:00 2001 From: Faust Date: Thu, 2 Apr 2015 00:57:18 +0200 Subject: [PATCH 015/127] add link to README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index b35d4dd..a64312f 100755 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ [![Build Status](https://travis-ci.org/domnikl/DesignPatternsPHP.png?branch=master)](https://travis-ci.org/domnikl/DesignPatternsPHP) +[Read the Docs of DesignPatternsPHP](http://designpatterns-php.readthedocs.org) + This is a collection of known design patterns and some sample code how to implement them in PHP. Every pattern has a small list of examples (most of them from Zend Framework, Symfony2 or Doctrine2 as I'm most familiar with this software). I think the problem with patterns is that often people do know them but don't know when to apply which. From 9fd800b9f6e76752ca79a6b3182ebf8a143661c1 Mon Sep 17 00:00:00 2001 From: Faust Date: Fri, 3 Apr 2015 00:24:24 +0200 Subject: [PATCH 016/127] fix embed some files and add download link to README.md --- Behavioral/ChainOfResponsibilities/index.rst | 12 +++++ Behavioral/Mediator/index.rst | 18 +++++++ Creational/AbstractFactory/index.rst | 24 +++++++++ Creational/Builder/Parts/index.rst | 53 -------------------- Creational/Builder/index.rst | 36 +++++++++++++ README.md | 1 + conf.py | 2 +- index.rst | 2 +- 8 files changed, 93 insertions(+), 55 deletions(-) delete mode 100644 Creational/Builder/Parts/index.rst diff --git a/Behavioral/ChainOfResponsibilities/index.rst b/Behavioral/ChainOfResponsibilities/index.rst index c838a29..68883c7 100644 --- a/Behavioral/ChainOfResponsibilities/index.rst +++ b/Behavioral/ChainOfResponsibilities/index.rst @@ -45,6 +45,18 @@ Request.php :language: php :linenos: +Responsible/FastStorage.php + +.. literalinclude:: Responsible/FastStorage.php + :language: php + :linenos: + +Responsible/SlowStorage.php + +.. literalinclude:: Responsible/SlowStorage.php + :language: php + :linenos: + Test ---- diff --git a/Behavioral/Mediator/index.rst b/Behavioral/Mediator/index.rst index 7df0287..d922b44 100644 --- a/Behavioral/Mediator/index.rst +++ b/Behavioral/Mediator/index.rst @@ -42,6 +42,24 @@ Colleague.php :language: php :linenos: +Subsystem/Client.php + +.. literalinclude:: Subsystem/Client.php + :language: php + :linenos: + +Subsystem/Database.php + +.. literalinclude:: Subsystem/Database.php + :language: php + :linenos: + +Subsystem/Server.php + +.. literalinclude:: Subsystem/Server.php + :language: php + :linenos: + Test ---- diff --git a/Creational/AbstractFactory/index.rst b/Creational/AbstractFactory/index.rst index 707968c..e8d2000 100644 --- a/Creational/AbstractFactory/index.rst +++ b/Creational/AbstractFactory/index.rst @@ -57,6 +57,30 @@ Picture.php :language: php :linenos: +Html/Picture.php + +.. literalinclude:: Html/Picture.php + :language: php + :linenos: + +Html/Text.php + +.. literalinclude:: Html/Text.php + :language: php + :linenos: + +Json/Picture.php + +.. literalinclude:: Json/Picture.php + :language: php + :linenos: + +Json/Text.php + +.. literalinclude:: Json/Text.php + :language: php + :linenos: + Test ---- diff --git a/Creational/Builder/Parts/index.rst b/Creational/Builder/Parts/index.rst deleted file mode 100644 index 8760de0..0000000 --- a/Creational/Builder/Parts/index.rst +++ /dev/null @@ -1,53 +0,0 @@ -Purpose -======= - -Examples -======== - -- - -Code ----- - -You can also find these code on `GitHub`_ - -Wheel.php - -.. literalinclude:: Wheel.php - :language: php - :linenos: - -Door.php - -.. literalinclude:: Door.php - :language: php - :linenos: - -Car.php - -.. literalinclude:: Car.php - :language: php - :linenos: - -Bike.php - -.. literalinclude:: Bike.php - :language: php - :linenos: - -Vehicle.php - -.. literalinclude:: Vehicle.php - :language: php - :linenos: - -Engine.php - -.. literalinclude:: Engine.php - :language: php - :linenos: - -Test ----- - -.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/Builder/Parts diff --git a/Creational/Builder/index.rst b/Creational/Builder/index.rst index b636e01..77fc308 100644 --- a/Creational/Builder/index.rst +++ b/Creational/Builder/index.rst @@ -56,6 +56,42 @@ BikeBuilder.php :language: php :linenos: +Parts/Wheel.php + +.. literalinclude:: Parts/Wheel.php + :language: php + :linenos: + +Parts/Door.php + +.. literalinclude:: Parts/Door.php + :language: php + :linenos: + +Parts/Car.php + +.. literalinclude:: Parts/Car.php + :language: php + :linenos: + +Parts/Bike.php + +.. literalinclude:: Parts/Bike.php + :language: php + :linenos: + +Parts/Vehicle.php + +.. literalinclude:: Parts/Vehicle.php + :language: php + :linenos: + +Parts/Engine.php + +.. literalinclude:: Parts/Engine.php + :language: php + :linenos: + Test ---- diff --git a/README.md b/README.md index a64312f..05e3d11 100755 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ [![Build Status](https://travis-ci.org/domnikl/DesignPatternsPHP.png?branch=master)](https://travis-ci.org/domnikl/DesignPatternsPHP) [Read the Docs of DesignPatternsPHP](http://designpatterns-php.readthedocs.org) +or [Download as PDF/Epub](https://readthedocs.org/projects/designpatterns-php/downloads/) This is a collection of known design patterns and some sample code how to implement them in PHP. Every pattern has a small list of examples (most of them from Zend Framework, Symfony2 or Doctrine2 as I'm most familiar with this software). diff --git a/conf.py b/conf.py index c58ec9d..a21fb82 100644 --- a/conf.py +++ b/conf.py @@ -48,7 +48,7 @@ master_doc = 'index' # General information about the project. project = u'DesignPatternsPHP' copyright = u'2015, Dominik Liebler' -author = u'Dominik Liebler' +author = u'Dominik Liebler with contributors' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the diff --git a/index.rst b/index.rst index e3a755a..c91e458 100644 --- a/index.rst +++ b/index.rst @@ -19,7 +19,7 @@ Patterns -------- The patterns can be structured in roughly three different categories. -Please click on the +Please click `here `__ for a full explanation of the pattern on Wikipedia. From c609ef5952d470b109ef4c9a02ed2452a4c7827c Mon Sep 17 00:00:00 2001 From: Faust Date: Fri, 3 Apr 2015 10:57:00 +0200 Subject: [PATCH 017/127] add wikipedia link --- Behavioral/ChainOfResponsibilities/index.rst | 8 ++++++-- Behavioral/Command/index.rst | 8 ++++++-- Behavioral/Iterator/index.rst | 8 ++++++-- Behavioral/Mediator/index.rst | 8 ++++++-- Behavioral/Memento/index.rst | 8 ++++++-- Behavioral/NullObject/index.rst | 8 ++++++-- Behavioral/Observer/index.rst | 8 ++++++-- Behavioral/README.md | 1 + Behavioral/Specification/index.rst | 8 ++++++-- Behavioral/State/index.rst | 8 ++++++-- Behavioral/Strategy/index.rst | 8 ++++++-- Behavioral/TemplateMethod/index.rst | 8 ++++++-- Behavioral/Visitor/index.rst | 8 ++++++-- Creational/AbstractFactory/index.rst | 8 ++++++-- Creational/Builder/index.rst | 8 ++++++-- Creational/FactoryMethod/index.rst | 8 ++++++-- Creational/Pool/index.rst | 8 ++++++-- Creational/Prototype/index.rst | 8 ++++++-- Creational/Singleton/index.rst | 8 ++++++-- More/Delegation/index.rst | 8 ++++++-- More/ServiceLocator/index.rst | 8 ++++++-- Structural/Adapter/index.rst | 8 ++++++-- Structural/Bridge/index.rst | 8 ++++++-- Structural/Composite/index.rst | 8 ++++++-- Structural/DataMapper/index.rst | 8 ++++++-- Structural/Decorator/index.rst | 8 ++++++-- Structural/DependencyInjection/index.rst | 8 ++++++-- Structural/Facade/index.rst | 8 ++++++-- Structural/FluentInterface/index.rst | 8 ++++++-- Structural/Proxy/index.rst | 8 ++++++-- Structural/Registry/index.rst | 8 ++++++-- _static/Wikipedia-logo.png | Bin 0 -> 43627 bytes conf.py | 2 +- index.rst | 9 ++++++--- 34 files changed, 188 insertions(+), 64 deletions(-) create mode 100644 _static/Wikipedia-logo.png diff --git a/Behavioral/ChainOfResponsibilities/index.rst b/Behavioral/ChainOfResponsibilities/index.rst index 68883c7..efeff83 100644 --- a/Behavioral/ChainOfResponsibilities/index.rst +++ b/Behavioral/ChainOfResponsibilities/index.rst @@ -1,5 +1,5 @@ -Chain Of Responsibilities -========================= +Chain Of Responsibilities |Wikipedia|_ +====================================== Purpose: -------- @@ -67,3 +67,7 @@ Tests/ChainTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/ChainOfResponsibilities +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Chain_of_responsibility_pattern \ No newline at end of file diff --git a/Behavioral/Command/index.rst b/Behavioral/Command/index.rst index 5056f13..f6d041e 100644 --- a/Behavioral/Command/index.rst +++ b/Behavioral/Command/index.rst @@ -1,5 +1,5 @@ -Command -======= +Command |Wikipedia|_ +==================== Purpose ------- @@ -74,3 +74,7 @@ Tests/CommandTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Command +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Command_pattern \ No newline at end of file diff --git a/Behavioral/Iterator/index.rst b/Behavioral/Iterator/index.rst index 6241bc8..3ef9e72 100644 --- a/Behavioral/Iterator/index.rst +++ b/Behavioral/Iterator/index.rst @@ -1,5 +1,5 @@ -Iterator -======== +Iterator |Wikipedia|_ +===================== Purpose ------- @@ -67,3 +67,7 @@ Tests/IteratorTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Iterator +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Iterator_pattern \ No newline at end of file diff --git a/Behavioral/Mediator/index.rst b/Behavioral/Mediator/index.rst index d922b44..77c7aaf 100644 --- a/Behavioral/Mediator/index.rst +++ b/Behavioral/Mediator/index.rst @@ -1,5 +1,5 @@ -Mediator -======== +Mediator |Wikipedia|_ +===================== Purpose ------- @@ -70,3 +70,7 @@ Tests/MediatorTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Mediator +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Mediator_pattern \ No newline at end of file diff --git a/Behavioral/Memento/index.rst b/Behavioral/Memento/index.rst index 9d28f27..d5ce670 100644 --- a/Behavioral/Memento/index.rst +++ b/Behavioral/Memento/index.rst @@ -1,5 +1,5 @@ -Memento -======= +Memento |Wikipedia|_ +==================== Purpose ------- @@ -65,3 +65,7 @@ Tests/MementoTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Memento +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Memento_pattern \ No newline at end of file diff --git a/Behavioral/NullObject/index.rst b/Behavioral/NullObject/index.rst index eb13a56..15d8eaf 100644 --- a/Behavioral/NullObject/index.rst +++ b/Behavioral/NullObject/index.rst @@ -1,5 +1,5 @@ -Null Object -=========== +Null Object |Wikipedia|_ +======================== Purpose ------- @@ -72,3 +72,7 @@ Tests/LoggerTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/NullObject +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Null_Object_pattern \ No newline at end of file diff --git a/Behavioral/Observer/index.rst b/Behavioral/Observer/index.rst index c14c448..4a9225f 100644 --- a/Behavioral/Observer/index.rst +++ b/Behavioral/Observer/index.rst @@ -1,5 +1,5 @@ -Observer -======== +Observer |Wikipedia|_ +===================== Purpose ------- @@ -55,3 +55,7 @@ Tests/ObserverTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Observer +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Observer_pattern \ No newline at end of file diff --git a/Behavioral/README.md b/Behavioral/README.md index d9c264e..bdf7316 100644 --- a/Behavioral/README.md +++ b/Behavioral/README.md @@ -9,6 +9,7 @@ communication. * [Command](Command) [:notebook:](http://en.wikipedia.org/wiki/Command_pattern) * [Iterator](Iterator) [:notebook:](http://en.wikipedia.org/wiki/Iterator_pattern) * [Mediator](Mediator) [:notebook:](http://en.wikipedia.org/wiki/Mediator_pattern) +* [Memento](Behavioral/Memento) [:notebook:](http://en.wikipedia.org/wiki/Memento_pattern) * [NullObject](NullObject) [:notebook:](http://en.wikipedia.org/wiki/Null_Object_pattern) * [Observer](Observer) [:notebook:](http://en.wikipedia.org/wiki/Observer_pattern) * [Specification](Specification) [:notebook:](http://en.wikipedia.org/wiki/Specification_pattern) diff --git a/Behavioral/Specification/index.rst b/Behavioral/Specification/index.rst index 6923159..167ce76 100644 --- a/Behavioral/Specification/index.rst +++ b/Behavioral/Specification/index.rst @@ -1,5 +1,5 @@ -Specification -============= +Specification |Wikipedia|_ +========================== Purpose ------- @@ -73,3 +73,7 @@ Tests/SpecificationTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Specification +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Specification_pattern \ No newline at end of file diff --git a/Behavioral/State/index.rst b/Behavioral/State/index.rst index 0b679c2..6815f38 100644 --- a/Behavioral/State/index.rst +++ b/Behavioral/State/index.rst @@ -1,5 +1,5 @@ -State -===== +State |Wikipedia|_ +================== Purpose ------- @@ -54,3 +54,7 @@ Test ---- .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/State +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/State_pattern \ No newline at end of file diff --git a/Behavioral/Strategy/index.rst b/Behavioral/Strategy/index.rst index c1a2fe3..55ad8fa 100644 --- a/Behavioral/Strategy/index.rst +++ b/Behavioral/Strategy/index.rst @@ -1,5 +1,5 @@ -Strategy -======== +Strategy |Wikipedia|_ +===================== Terminology: ------------ @@ -68,3 +68,7 @@ Tests/StrategyTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Strategy +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Strategy_pattern \ No newline at end of file diff --git a/Behavioral/TemplateMethod/index.rst b/Behavioral/TemplateMethod/index.rst index f3be5bc..497f09e 100644 --- a/Behavioral/TemplateMethod/index.rst +++ b/Behavioral/TemplateMethod/index.rst @@ -1,5 +1,5 @@ -Template Method -=============== +Template Method |Wikipedia|_ +============================ Purpose ------- @@ -61,3 +61,7 @@ Tests/JourneyTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/TemplateMethod +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Template_method_pattern \ No newline at end of file diff --git a/Behavioral/Visitor/index.rst b/Behavioral/Visitor/index.rst index 85fb280..0cf6c90 100644 --- a/Behavioral/Visitor/index.rst +++ b/Behavioral/Visitor/index.rst @@ -1,5 +1,5 @@ -Visitor -======= +Visitor |Wikipedia|_ +==================== Purpose ------- @@ -65,3 +65,7 @@ Tests/VisitorTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Visitor +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Visitor_pattern \ No newline at end of file diff --git a/Creational/AbstractFactory/index.rst b/Creational/AbstractFactory/index.rst index e8d2000..65aba41 100644 --- a/Creational/AbstractFactory/index.rst +++ b/Creational/AbstractFactory/index.rst @@ -1,5 +1,5 @@ -Abstract Factory -================ +Abstract Factory |Wikipedia|_ +============================= Purpose ------- @@ -91,3 +91,7 @@ Tests/AbstractFactoryTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/AbstractFactory +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Abstract_factory_pattern \ No newline at end of file diff --git a/Creational/Builder/index.rst b/Creational/Builder/index.rst index 77fc308..2784669 100644 --- a/Creational/Builder/index.rst +++ b/Creational/Builder/index.rst @@ -1,5 +1,5 @@ -Builder -======= +Builder |Wikipedia|_ +==================== Purpose ------- @@ -102,3 +102,7 @@ Tests/DirectorTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/Builder +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Builder_pattern \ No newline at end of file diff --git a/Creational/FactoryMethod/index.rst b/Creational/FactoryMethod/index.rst index 693321f..0206e30 100644 --- a/Creational/FactoryMethod/index.rst +++ b/Creational/FactoryMethod/index.rst @@ -1,5 +1,5 @@ -Factory Method -============== +Factory Method |Wikipedia|_ +=========================== Purpose ------- @@ -80,3 +80,7 @@ Tests/FactoryMethodTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/FactoryMethod +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Factory_method_pattern \ No newline at end of file diff --git a/Creational/Pool/index.rst b/Creational/Pool/index.rst index 30d3be0..f41f91a 100644 --- a/Creational/Pool/index.rst +++ b/Creational/Pool/index.rst @@ -1,5 +1,5 @@ -Pool -==== +Pool |Wikipedia|_ +================= The **object pool pattern** is a software creational design pattern that uses a set of initialized objects kept ready to use – a "pool" – rather @@ -67,3 +67,7 @@ Tests/PoolTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/Pool +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Object_pool_pattern diff --git a/Creational/Prototype/index.rst b/Creational/Prototype/index.rst index 31a98a3..b4c4a37 100644 --- a/Creational/Prototype/index.rst +++ b/Creational/Prototype/index.rst @@ -1,5 +1,5 @@ -Prototype -========= +Prototype |Wikipedia|_ +====================== Purpose ------- @@ -53,3 +53,7 @@ Test ---- .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/Prototype +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Prototype_pattern \ No newline at end of file diff --git a/Creational/Singleton/index.rst b/Creational/Singleton/index.rst index 7393782..7700b4f 100644 --- a/Creational/Singleton/index.rst +++ b/Creational/Singleton/index.rst @@ -1,5 +1,5 @@ -Singleton -========= +Singleton |Wikipedia|_ +====================== **THIS IS CONSIDERED TO BE AN ANTI-PATTERN! FOR BETTER TESTABILITY AND MAINTAINABILITY USE DEPENDENCY INJECTION!** @@ -47,3 +47,7 @@ Tests/SingletonTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/Singleton +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Singleton_pattern \ No newline at end of file diff --git a/More/Delegation/index.rst b/More/Delegation/index.rst index 873f3e2..63ce972 100644 --- a/More/Delegation/index.rst +++ b/More/Delegation/index.rst @@ -1,5 +1,5 @@ -Delegation -========== +Delegation |Wikipedia|_ +======================= Purpose ------- @@ -51,3 +51,7 @@ Tests/DelegationTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/More/Delegation +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Delegation_pattern \ No newline at end of file diff --git a/More/ServiceLocator/index.rst b/More/ServiceLocator/index.rst index 96bad04..da46086 100644 --- a/More/ServiceLocator/index.rst +++ b/More/ServiceLocator/index.rst @@ -1,5 +1,5 @@ -Service Locator -=============== +Service Locator |Wikipedia|_ +============================ Purpose ------- @@ -81,3 +81,7 @@ Tests/ServiceLocatorTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/More/ServiceLocator +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Service_locator_pattern \ No newline at end of file diff --git a/Structural/Adapter/index.rst b/Structural/Adapter/index.rst index 5d843dd..d160833 100644 --- a/Structural/Adapter/index.rst +++ b/Structural/Adapter/index.rst @@ -1,5 +1,5 @@ -Adapter / Wrapper -================= +Adapter / Wrapper |Wikipedia|_ +============================== Purpose ------- @@ -68,3 +68,7 @@ Tests/AdapterTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Adapter +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Adapter_pattern \ No newline at end of file diff --git a/Structural/Bridge/index.rst b/Structural/Bridge/index.rst index 5fb8cfe..0a08767 100644 --- a/Structural/Bridge/index.rst +++ b/Structural/Bridge/index.rst @@ -1,5 +1,5 @@ -Bridge -====== +Bridge |Wikipedia|_ +=================== Purpose ------- @@ -71,3 +71,7 @@ Tests/BridgeTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Bridge +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Bridge_pattern \ No newline at end of file diff --git a/Structural/Composite/index.rst b/Structural/Composite/index.rst index ff91f66..05fa9a9 100644 --- a/Structural/Composite/index.rst +++ b/Structural/Composite/index.rst @@ -1,5 +1,5 @@ -Composite -========= +Composite |Wikipedia|_ +====================== Purpose ------- @@ -62,3 +62,7 @@ Tests/CompositeTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Composite +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Composite_pattern \ No newline at end of file diff --git a/Structural/DataMapper/index.rst b/Structural/DataMapper/index.rst index cd51e7a..9d99a63 100644 --- a/Structural/DataMapper/index.rst +++ b/Structural/DataMapper/index.rst @@ -1,5 +1,5 @@ -Data Mapper -=========== +Data Mapper |Wikipedia|_ +======================== Purpose ------- @@ -57,3 +57,7 @@ Tests/DataMapperTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/DataMapper +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Data_mapper_pattern \ No newline at end of file diff --git a/Structural/Decorator/index.rst b/Structural/Decorator/index.rst index 6ace194..a39bc60 100644 --- a/Structural/Decorator/index.rst +++ b/Structural/Decorator/index.rst @@ -1,5 +1,5 @@ -Decorator -========= +Decorator |Wikipedia|_ +====================== Purpose ------- @@ -65,3 +65,7 @@ Tests/DecoratorTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Decorator +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Decorator_pattern \ No newline at end of file diff --git a/Structural/DependencyInjection/index.rst b/Structural/DependencyInjection/index.rst index 544cc64..49dc35e 100644 --- a/Structural/DependencyInjection/index.rst +++ b/Structural/DependencyInjection/index.rst @@ -1,5 +1,5 @@ -Dependency Injection -==================== +Dependency Injection |Wikipedia|_ +================================= Purpose ------- @@ -85,3 +85,7 @@ Tests/config.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/DependencyInjection +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Dependency_injection \ No newline at end of file diff --git a/Structural/Facade/index.rst b/Structural/Facade/index.rst index 6df49cc..6926172 100644 --- a/Structural/Facade/index.rst +++ b/Structural/Facade/index.rst @@ -1,5 +1,5 @@ -Facade -====== +Facade |Wikipedia|_ +=================== Purpose ------- @@ -63,3 +63,7 @@ Tests/FacadeTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Facade +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Facade_pattern \ No newline at end of file diff --git a/Structural/FluentInterface/index.rst b/Structural/FluentInterface/index.rst index 80adfbe..b3650a1 100644 --- a/Structural/FluentInterface/index.rst +++ b/Structural/FluentInterface/index.rst @@ -1,5 +1,5 @@ -Fluent Interface -================ +Fluent Interface |Wikipedia|_ +============================= Purpose ------- @@ -43,3 +43,7 @@ Tests/FluentInterfaceTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/FluentInterface +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Fluent_interface \ No newline at end of file diff --git a/Structural/Proxy/index.rst b/Structural/Proxy/index.rst index a7ce379..5dababc 100644 --- a/Structural/Proxy/index.rst +++ b/Structural/Proxy/index.rst @@ -1,5 +1,5 @@ -Proxy -===== +Proxy |Wikipedia|_ +================== Purpose ------- @@ -41,3 +41,7 @@ Test ---- .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Proxy +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Proxy_pattern \ No newline at end of file diff --git a/Structural/Registry/index.rst b/Structural/Registry/index.rst index b63e1c6..3ad1443 100644 --- a/Structural/Registry/index.rst +++ b/Structural/Registry/index.rst @@ -1,5 +1,5 @@ -Registry -======== +Registry |Wikipedia|_ +===================== Purpose ------- @@ -44,3 +44,7 @@ Tests/RegistryTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Registry +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 30 px + :width: 30 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Service_locator_pattern \ No newline at end of file diff --git a/_static/Wikipedia-logo.png b/_static/Wikipedia-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..7eeeecd33a5ec236f56992ceeda71634cd36f99a GIT binary patch literal 43627 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 -for a full explanation of the pattern on Wikipedia. +Please click |Wikipedia|_ for a full explanation of the pattern on Wikipedia. .. toctree:: :titlesonly: @@ -69,3 +67,8 @@ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +.. |Wikipedia| image:: /_static/Wikipedia-logo.png + :height: 20 px + :width: 20 px +.. _Wikipedia: http://en.wikipedia.org/wiki/Software_design_pattern From 818c221c788e0ee8eabf063ea1f1eb635c1e8cd9 Mon Sep 17 00:00:00 2001 From: Faust Date: Sun, 5 Apr 2015 03:29:00 +0200 Subject: [PATCH 018/127] fix wikipedia links for pdf version --- Behavioral/ChainOfResponsibilities/index.rst | 9 +++------ Behavioral/Command/index.rst | 9 +++------ Behavioral/Iterator/index.rst | 9 +++------ Behavioral/Mediator/index.rst | 9 +++------ Behavioral/Memento/index.rst | 9 +++------ Behavioral/NullObject/index.rst | 9 +++------ Behavioral/Observer/index.rst | 9 +++------ Behavioral/Specification/index.rst | 9 +++------ Behavioral/State/index.rst | 9 +++------ Behavioral/Strategy/index.rst | 9 +++------ Behavioral/TemplateMethod/index.rst | 9 +++------ Behavioral/Visitor/index.rst | 9 +++------ Creational/AbstractFactory/index.rst | 9 +++------ Creational/Builder/index.rst | 9 +++------ Creational/FactoryMethod/index.rst | 9 +++------ Creational/Pool/index.rst | 9 +++------ Creational/Prototype/index.rst | 9 +++------ Creational/Singleton/index.rst | 9 +++------ More/Delegation/index.rst | 9 +++------ More/ServiceLocator/index.rst | 9 +++------ README.md | 4 ++-- Structural/Adapter/index.rst | 9 +++------ Structural/Bridge/index.rst | 9 +++------ Structural/Composite/index.rst | 9 +++------ Structural/DataMapper/index.rst | 9 +++------ Structural/Decorator/index.rst | 9 +++------ Structural/DependencyInjection/index.rst | 9 +++------ Structural/Facade/index.rst | 9 +++------ Structural/FluentInterface/index.rst | 10 ++++------ Structural/Proxy/index.rst | 9 +++------ Structural/Registry/index.rst | 9 +++------ _static/Wikipedia-logo.png | Bin 43627 -> 0 bytes conf.py | 2 +- index.rst | 14 ++++++-------- 34 files changed, 100 insertions(+), 191 deletions(-) delete mode 100644 _static/Wikipedia-logo.png diff --git a/Behavioral/ChainOfResponsibilities/index.rst b/Behavioral/ChainOfResponsibilities/index.rst index efeff83..582faec 100644 --- a/Behavioral/ChainOfResponsibilities/index.rst +++ b/Behavioral/ChainOfResponsibilities/index.rst @@ -1,5 +1,5 @@ -Chain Of Responsibilities |Wikipedia|_ -====================================== +`Chain Of Responsibilities`_ +============================ Purpose: -------- @@ -67,7 +67,4 @@ Tests/ChainTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/ChainOfResponsibilities -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Chain_of_responsibility_pattern \ No newline at end of file +.. _`Chain Of Responsibilities`: http://en.wikipedia.org/wiki/Chain_of_responsibility_pattern \ No newline at end of file diff --git a/Behavioral/Command/index.rst b/Behavioral/Command/index.rst index f6d041e..fc93d8e 100644 --- a/Behavioral/Command/index.rst +++ b/Behavioral/Command/index.rst @@ -1,5 +1,5 @@ -Command |Wikipedia|_ -==================== +`Command`_ +========== Purpose ------- @@ -74,7 +74,4 @@ Tests/CommandTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Command -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Command_pattern \ No newline at end of file +.. _`Command`: http://en.wikipedia.org/wiki/Command_pattern \ No newline at end of file diff --git a/Behavioral/Iterator/index.rst b/Behavioral/Iterator/index.rst index 3ef9e72..cb5195a 100644 --- a/Behavioral/Iterator/index.rst +++ b/Behavioral/Iterator/index.rst @@ -1,5 +1,5 @@ -Iterator |Wikipedia|_ -===================== +`Iterator`_ +=========== Purpose ------- @@ -67,7 +67,4 @@ Tests/IteratorTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Iterator -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Iterator_pattern \ No newline at end of file +.. _`Iterator`: http://en.wikipedia.org/wiki/Iterator_pattern \ No newline at end of file diff --git a/Behavioral/Mediator/index.rst b/Behavioral/Mediator/index.rst index 77c7aaf..05277dc 100644 --- a/Behavioral/Mediator/index.rst +++ b/Behavioral/Mediator/index.rst @@ -1,5 +1,5 @@ -Mediator |Wikipedia|_ -===================== +`Mediator`_ +=========== Purpose ------- @@ -70,7 +70,4 @@ Tests/MediatorTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Mediator -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Mediator_pattern \ No newline at end of file +.. _`Mediator`: http://en.wikipedia.org/wiki/Mediator_pattern \ No newline at end of file diff --git a/Behavioral/Memento/index.rst b/Behavioral/Memento/index.rst index d5ce670..50b8046 100644 --- a/Behavioral/Memento/index.rst +++ b/Behavioral/Memento/index.rst @@ -1,5 +1,5 @@ -Memento |Wikipedia|_ -==================== +`Memento`_ +========== Purpose ------- @@ -65,7 +65,4 @@ Tests/MementoTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Memento -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Memento_pattern \ No newline at end of file +.. _`Memento`: http://en.wikipedia.org/wiki/Memento_pattern \ No newline at end of file diff --git a/Behavioral/NullObject/index.rst b/Behavioral/NullObject/index.rst index 15d8eaf..c969326 100644 --- a/Behavioral/NullObject/index.rst +++ b/Behavioral/NullObject/index.rst @@ -1,5 +1,5 @@ -Null Object |Wikipedia|_ -======================== +`Null Object`_ +============== Purpose ------- @@ -72,7 +72,4 @@ Tests/LoggerTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/NullObject -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Null_Object_pattern \ No newline at end of file +.. _`Null Object`: http://en.wikipedia.org/wiki/Null_Object_pattern \ No newline at end of file diff --git a/Behavioral/Observer/index.rst b/Behavioral/Observer/index.rst index 4a9225f..00dd00d 100644 --- a/Behavioral/Observer/index.rst +++ b/Behavioral/Observer/index.rst @@ -1,5 +1,5 @@ -Observer |Wikipedia|_ -===================== +`Observer`_ +=========== Purpose ------- @@ -55,7 +55,4 @@ Tests/ObserverTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Observer -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Observer_pattern \ No newline at end of file +.. _`Observer`: http://en.wikipedia.org/wiki/Observer_pattern \ No newline at end of file diff --git a/Behavioral/Specification/index.rst b/Behavioral/Specification/index.rst index 167ce76..2aac692 100644 --- a/Behavioral/Specification/index.rst +++ b/Behavioral/Specification/index.rst @@ -1,5 +1,5 @@ -Specification |Wikipedia|_ -========================== +`Specification`_ +================ Purpose ------- @@ -73,7 +73,4 @@ Tests/SpecificationTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Specification -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Specification_pattern \ No newline at end of file +.. _`Specification`: http://en.wikipedia.org/wiki/Specification_pattern \ No newline at end of file diff --git a/Behavioral/State/index.rst b/Behavioral/State/index.rst index 6815f38..ff7185e 100644 --- a/Behavioral/State/index.rst +++ b/Behavioral/State/index.rst @@ -1,5 +1,5 @@ -State |Wikipedia|_ -================== +`State`_ +======== Purpose ------- @@ -54,7 +54,4 @@ Test ---- .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/State -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/State_pattern \ No newline at end of file +.. _`State`: http://en.wikipedia.org/wiki/State_pattern \ No newline at end of file diff --git a/Behavioral/Strategy/index.rst b/Behavioral/Strategy/index.rst index 55ad8fa..3853771 100644 --- a/Behavioral/Strategy/index.rst +++ b/Behavioral/Strategy/index.rst @@ -1,5 +1,5 @@ -Strategy |Wikipedia|_ -===================== +`Strategy`_ +=========== Terminology: ------------ @@ -68,7 +68,4 @@ Tests/StrategyTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Strategy -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Strategy_pattern \ No newline at end of file +.. _`Strategy`: http://en.wikipedia.org/wiki/Strategy_pattern \ No newline at end of file diff --git a/Behavioral/TemplateMethod/index.rst b/Behavioral/TemplateMethod/index.rst index 497f09e..0239c0f 100644 --- a/Behavioral/TemplateMethod/index.rst +++ b/Behavioral/TemplateMethod/index.rst @@ -1,5 +1,5 @@ -Template Method |Wikipedia|_ -============================ +`Template Method`_ +================== Purpose ------- @@ -61,7 +61,4 @@ Tests/JourneyTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/TemplateMethod -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Template_method_pattern \ No newline at end of file +.. _`Template Method`: http://en.wikipedia.org/wiki/Template_method_pattern \ No newline at end of file diff --git a/Behavioral/Visitor/index.rst b/Behavioral/Visitor/index.rst index 0cf6c90..4fca151 100644 --- a/Behavioral/Visitor/index.rst +++ b/Behavioral/Visitor/index.rst @@ -1,5 +1,5 @@ -Visitor |Wikipedia|_ -==================== +`Visitor`_ +========== Purpose ------- @@ -65,7 +65,4 @@ Tests/VisitorTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Visitor -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Visitor_pattern \ No newline at end of file +.. _`Visitor`: http://en.wikipedia.org/wiki/Visitor_pattern \ No newline at end of file diff --git a/Creational/AbstractFactory/index.rst b/Creational/AbstractFactory/index.rst index 65aba41..9942e4c 100644 --- a/Creational/AbstractFactory/index.rst +++ b/Creational/AbstractFactory/index.rst @@ -1,5 +1,5 @@ -Abstract Factory |Wikipedia|_ -============================= +`Abstract Factory`_ +=================== Purpose ------- @@ -91,7 +91,4 @@ Tests/AbstractFactoryTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/AbstractFactory -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Abstract_factory_pattern \ No newline at end of file +.. _`Abstract Factory`: http://en.wikipedia.org/wiki/Abstract_factory_pattern \ No newline at end of file diff --git a/Creational/Builder/index.rst b/Creational/Builder/index.rst index 2784669..03a1030 100644 --- a/Creational/Builder/index.rst +++ b/Creational/Builder/index.rst @@ -1,5 +1,5 @@ -Builder |Wikipedia|_ -==================== +`Builder`_ +========== Purpose ------- @@ -102,7 +102,4 @@ Tests/DirectorTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/Builder -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Builder_pattern \ No newline at end of file +.. _`Builder`: http://en.wikipedia.org/wiki/Builder_pattern \ No newline at end of file diff --git a/Creational/FactoryMethod/index.rst b/Creational/FactoryMethod/index.rst index 0206e30..7552078 100644 --- a/Creational/FactoryMethod/index.rst +++ b/Creational/FactoryMethod/index.rst @@ -1,5 +1,5 @@ -Factory Method |Wikipedia|_ -=========================== +`Factory Method`_ +================= Purpose ------- @@ -80,7 +80,4 @@ Tests/FactoryMethodTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/FactoryMethod -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Factory_method_pattern \ No newline at end of file +.. _`Factory Method`: http://en.wikipedia.org/wiki/Factory_method_pattern \ No newline at end of file diff --git a/Creational/Pool/index.rst b/Creational/Pool/index.rst index f41f91a..6912c72 100644 --- a/Creational/Pool/index.rst +++ b/Creational/Pool/index.rst @@ -1,5 +1,5 @@ -Pool |Wikipedia|_ -================= +`Pool`_ +======= The **object pool pattern** is a software creational design pattern that uses a set of initialized objects kept ready to use – a "pool" – rather @@ -67,7 +67,4 @@ Tests/PoolTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/Pool -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Object_pool_pattern +.. _`Pool`: http://en.wikipedia.org/wiki/Object_pool_pattern diff --git a/Creational/Prototype/index.rst b/Creational/Prototype/index.rst index b4c4a37..5485edd 100644 --- a/Creational/Prototype/index.rst +++ b/Creational/Prototype/index.rst @@ -1,5 +1,5 @@ -Prototype |Wikipedia|_ -====================== +`Prototype`_ +============ Purpose ------- @@ -53,7 +53,4 @@ Test ---- .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/Prototype -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Prototype_pattern \ No newline at end of file +.. _`Prototype`: http://en.wikipedia.org/wiki/Prototype_pattern \ No newline at end of file diff --git a/Creational/Singleton/index.rst b/Creational/Singleton/index.rst index 7700b4f..319364e 100644 --- a/Creational/Singleton/index.rst +++ b/Creational/Singleton/index.rst @@ -1,5 +1,5 @@ -Singleton |Wikipedia|_ -====================== +`Singleton`_ +============ **THIS IS CONSIDERED TO BE AN ANTI-PATTERN! FOR BETTER TESTABILITY AND MAINTAINABILITY USE DEPENDENCY INJECTION!** @@ -47,7 +47,4 @@ Tests/SingletonTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/Singleton -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Singleton_pattern \ No newline at end of file +.. _`Singleton`: http://en.wikipedia.org/wiki/Singleton_pattern \ No newline at end of file diff --git a/More/Delegation/index.rst b/More/Delegation/index.rst index 63ce972..149cddf 100644 --- a/More/Delegation/index.rst +++ b/More/Delegation/index.rst @@ -1,5 +1,5 @@ -Delegation |Wikipedia|_ -======================= +`Delegation`_ +============= Purpose ------- @@ -51,7 +51,4 @@ Tests/DelegationTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/More/Delegation -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Delegation_pattern \ No newline at end of file +.. _`Delegation`: http://en.wikipedia.org/wiki/Delegation_pattern \ No newline at end of file diff --git a/More/ServiceLocator/index.rst b/More/ServiceLocator/index.rst index da46086..2972391 100644 --- a/More/ServiceLocator/index.rst +++ b/More/ServiceLocator/index.rst @@ -1,5 +1,5 @@ -Service Locator |Wikipedia|_ -============================ +`Service Locator`_ +================== Purpose ------- @@ -81,7 +81,4 @@ Tests/ServiceLocatorTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/More/ServiceLocator -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Service_locator_pattern \ No newline at end of file +.. _`Service Locator`: http://en.wikipedia.org/wiki/Service_locator_pattern \ No newline at end of file diff --git a/README.md b/README.md index 05e3d11..55200f4 100755 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ [![Build Status](https://travis-ci.org/domnikl/DesignPatternsPHP.png?branch=master)](https://travis-ci.org/domnikl/DesignPatternsPHP) -[Read the Docs of DesignPatternsPHP](http://designpatterns-php.readthedocs.org) -or [Download as PDF/Epub](https://readthedocs.org/projects/designpatterns-php/downloads/) +[Read the Docs of DesignPatternsPHP](http://designpatternsphp.readthedocs.org) +or [Download as PDF/Epub](https://readthedocs.org/projects/designpatternsphp/downloads/) This is a collection of known design patterns and some sample code how to implement them in PHP. Every pattern has a small list of examples (most of them from Zend Framework, Symfony2 or Doctrine2 as I'm most familiar with this software). diff --git a/Structural/Adapter/index.rst b/Structural/Adapter/index.rst index d160833..2aa2ea5 100644 --- a/Structural/Adapter/index.rst +++ b/Structural/Adapter/index.rst @@ -1,5 +1,5 @@ -Adapter / Wrapper |Wikipedia|_ -============================== +`Adapter / Wrapper`_ +==================== Purpose ------- @@ -68,7 +68,4 @@ Tests/AdapterTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Adapter -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Adapter_pattern \ No newline at end of file +.. _`Adapter / Wrapper`: http://en.wikipedia.org/wiki/Adapter_pattern \ No newline at end of file diff --git a/Structural/Bridge/index.rst b/Structural/Bridge/index.rst index 0a08767..62b8056 100644 --- a/Structural/Bridge/index.rst +++ b/Structural/Bridge/index.rst @@ -1,5 +1,5 @@ -Bridge |Wikipedia|_ -=================== +`Bridge`_ +========= Purpose ------- @@ -71,7 +71,4 @@ Tests/BridgeTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Bridge -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Bridge_pattern \ No newline at end of file +.. _`Bridge`: http://en.wikipedia.org/wiki/Bridge_pattern \ No newline at end of file diff --git a/Structural/Composite/index.rst b/Structural/Composite/index.rst index 05fa9a9..6c4af7d 100644 --- a/Structural/Composite/index.rst +++ b/Structural/Composite/index.rst @@ -1,5 +1,5 @@ -Composite |Wikipedia|_ -====================== +`Composite`_ +============ Purpose ------- @@ -62,7 +62,4 @@ Tests/CompositeTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Composite -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Composite_pattern \ No newline at end of file +.. _`Composite`: http://en.wikipedia.org/wiki/Composite_pattern \ No newline at end of file diff --git a/Structural/DataMapper/index.rst b/Structural/DataMapper/index.rst index 9d99a63..dcc24de 100644 --- a/Structural/DataMapper/index.rst +++ b/Structural/DataMapper/index.rst @@ -1,5 +1,5 @@ -Data Mapper |Wikipedia|_ -======================== +`Data Mapper`_ +============== Purpose ------- @@ -57,7 +57,4 @@ Tests/DataMapperTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/DataMapper -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Data_mapper_pattern \ No newline at end of file +.. _`Data Mapper`: http://en.wikipedia.org/wiki/Data_mapper_pattern \ No newline at end of file diff --git a/Structural/Decorator/index.rst b/Structural/Decorator/index.rst index a39bc60..cb9d92b 100644 --- a/Structural/Decorator/index.rst +++ b/Structural/Decorator/index.rst @@ -1,5 +1,5 @@ -Decorator |Wikipedia|_ -====================== +`Decorator`_ +============ Purpose ------- @@ -65,7 +65,4 @@ Tests/DecoratorTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Decorator -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Decorator_pattern \ No newline at end of file +.. _`Decorator`: http://en.wikipedia.org/wiki/Decorator_pattern \ No newline at end of file diff --git a/Structural/DependencyInjection/index.rst b/Structural/DependencyInjection/index.rst index 49dc35e..bc7ddff 100644 --- a/Structural/DependencyInjection/index.rst +++ b/Structural/DependencyInjection/index.rst @@ -1,5 +1,5 @@ -Dependency Injection |Wikipedia|_ -================================= +`Dependency Injection`_ +======================= Purpose ------- @@ -85,7 +85,4 @@ Tests/config.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/DependencyInjection -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Dependency_injection \ No newline at end of file +.. _`Dependency Injection`: http://en.wikipedia.org/wiki/Dependency_injection \ No newline at end of file diff --git a/Structural/Facade/index.rst b/Structural/Facade/index.rst index 6926172..e2baeca 100644 --- a/Structural/Facade/index.rst +++ b/Structural/Facade/index.rst @@ -1,5 +1,5 @@ -Facade |Wikipedia|_ -=================== +`Facade`_ +========= Purpose ------- @@ -63,7 +63,4 @@ Tests/FacadeTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Facade -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Facade_pattern \ No newline at end of file +.. _`Facade`: http://en.wikipedia.org/wiki/Facade_pattern \ No newline at end of file diff --git a/Structural/FluentInterface/index.rst b/Structural/FluentInterface/index.rst index b3650a1..a1dd9c8 100644 --- a/Structural/FluentInterface/index.rst +++ b/Structural/FluentInterface/index.rst @@ -1,5 +1,5 @@ -Fluent Interface |Wikipedia|_ -============================= +`Fluent Interface`_ +=================== Purpose ------- @@ -43,7 +43,5 @@ Tests/FluentInterfaceTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/FluentInterface -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Fluent_interface \ No newline at end of file + +.. _`Fluent Interface`: http://en.wikipedia.org/wiki/Fluent_interface \ No newline at end of file diff --git a/Structural/Proxy/index.rst b/Structural/Proxy/index.rst index 5dababc..4ff818e 100644 --- a/Structural/Proxy/index.rst +++ b/Structural/Proxy/index.rst @@ -1,5 +1,5 @@ -Proxy |Wikipedia|_ -================== +`Proxy`_ +======== Purpose ------- @@ -41,7 +41,4 @@ Test ---- .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Proxy -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Proxy_pattern \ No newline at end of file +.. _`Proxy`: http://en.wikipedia.org/wiki/Proxy_pattern \ No newline at end of file diff --git a/Structural/Registry/index.rst b/Structural/Registry/index.rst index 3ad1443..f09bd2f 100644 --- a/Structural/Registry/index.rst +++ b/Structural/Registry/index.rst @@ -1,5 +1,5 @@ -Registry |Wikipedia|_ -===================== +`Registry`_ +=========== Purpose ------- @@ -44,7 +44,4 @@ Tests/RegistryTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Registry -.. |Wikipedia| image:: /_static/Wikipedia-logo.png - :height: 30 px - :width: 30 px -.. _Wikipedia: http://en.wikipedia.org/wiki/Service_locator_pattern \ No newline at end of file +.. _`Registry`: http://en.wikipedia.org/wiki/Service_locator_pattern \ No newline at end of file diff --git a/_static/Wikipedia-logo.png b/_static/Wikipedia-logo.png deleted file mode 100644 index 7eeeecd33a5ec236f56992ceeda71634cd36f99a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43627 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 Date: Sun, 5 Apr 2015 06:05:24 +0200 Subject: [PATCH 019/127] Change index.rst to README.rst remove all pattern's README.md --- Behavioral/ChainOfResponsibilities/README.md | 16 ------ .../{index.rst => README.rst} | 0 Behavioral/Command/README.md | 21 -------- Behavioral/Command/{index.rst => README.rst} | 0 Behavioral/Iterator/README.md | 17 ------ Behavioral/Iterator/{index.rst => README.rst} | 0 Behavioral/Mediator/README.md | 15 ------ Behavioral/Mediator/{index.rst => README.rst} | 0 Behavioral/Memento/README.md | 22 -------- Behavioral/Memento/{index.rst => README.rst} | 0 Behavioral/NullObject/README.md | 22 -------- .../NullObject/{index.rst => README.rst} | 0 Behavioral/Observer/README.md | 18 ------- Behavioral/Observer/{index.rst => README.rst} | 0 Behavioral/{index.rst => README.rst} | 24 ++++----- Behavioral/Specification/README.md | 10 ---- .../Specification/{index.rst => README.rst} | 0 Behavioral/State/README.md | 9 ---- Behavioral/State/{index.rst => README.rst} | 0 Behavioral/Strategy/README.md | 20 ------- Behavioral/Strategy/{index.rst => README.rst} | 0 Behavioral/TemplateMethod/README.md | 18 ------- .../TemplateMethod/{index.rst => README.rst} | 0 Behavioral/Visitor/README.md | 12 ----- Behavioral/Visitor/{index.rst => README.rst} | 0 Creational/AbstractFactory/README.md | 10 ---- .../AbstractFactory/{index.rst => README.rst} | 0 Creational/Builder/Parts/README.md | 10 ---- Creational/Builder/README.md | 19 ------- Creational/Builder/{index.rst => README.rst} | 0 Creational/FactoryMethod/README.md | 15 ------ .../FactoryMethod/{index.rst => README.rst} | 0 Creational/Multiton/README.md | 16 ------ Creational/Multiton/{index.rst => README.rst} | 0 Creational/Pool/README.md | 12 ----- Creational/Pool/{index.rst => README.rst} | 0 Creational/Prototype/README.md | 13 ----- .../Prototype/{index.rst => README.rst} | 0 Creational/{index.rst => README.rst} | 18 +++---- Creational/SimpleFactory/README.md | 13 ----- .../SimpleFactory/{index.rst => README.rst} | 0 Creational/Singleton/README.md | 17 ------ .../Singleton/{index.rst => README.rst} | 0 Creational/StaticFactory/README.md | 15 ------ .../StaticFactory/{index.rst => README.rst} | 0 More/Delegation/README.md | 13 ----- More/Delegation/{index.rst => README.rst} | 0 More/README.rst | 9 ++++ More/Repository/README.md | 16 ------ More/Repository/{index.rst => README.rst} | 0 More/ServiceLocator/README.md | 20 ------- More/ServiceLocator/{index.rst => README.rst} | 0 More/index.rst | 9 ---- index.rst => README.rst | 8 +-- Structural/Adapter/README.md | 14 ----- Structural/Adapter/{index.rst => README.rst} | 0 Structural/Bridge/README.md | 12 ----- Structural/Bridge/{index.rst => README.rst} | 0 Structural/Composite/README.md | 15 ------ .../Composite/{index.rst => README.rst} | 0 Structural/DataMapper/README.md | 22 -------- .../DataMapper/{index.rst => README.rst} | 0 Structural/Decorator/README.md | 14 ----- .../Decorator/{index.rst => README.rst} | 0 Structural/DependencyInjection/README.md | 20 ------- .../{index.rst => README.rst} | 0 Structural/Facade/README.md | 21 -------- Structural/Facade/{index.rst => README.rst} | 0 Structural/FluentInterface/README.md | 15 ------ .../FluentInterface/{index.rst => README.rst} | 0 Structural/Proxy/README.md | 13 ----- Structural/Proxy/{index.rst => README.rst} | 0 Structural/{index.rst => README.rst} | 20 +++---- Structural/Registry/README.md | 15 ------ Structural/Registry/{index.rst => README.rst} | 0 conf.py | 2 +- read-the-docs.sh | 52 ------------------- 77 files changed, 45 insertions(+), 647 deletions(-) delete mode 100644 Behavioral/ChainOfResponsibilities/README.md rename Behavioral/ChainOfResponsibilities/{index.rst => README.rst} (100%) delete mode 100644 Behavioral/Command/README.md rename Behavioral/Command/{index.rst => README.rst} (100%) delete mode 100644 Behavioral/Iterator/README.md rename Behavioral/Iterator/{index.rst => README.rst} (100%) delete mode 100644 Behavioral/Mediator/README.md rename Behavioral/Mediator/{index.rst => README.rst} (100%) delete mode 100644 Behavioral/Memento/README.md rename Behavioral/Memento/{index.rst => README.rst} (100%) delete mode 100644 Behavioral/NullObject/README.md rename Behavioral/NullObject/{index.rst => README.rst} (100%) delete mode 100644 Behavioral/Observer/README.md rename Behavioral/Observer/{index.rst => README.rst} (100%) rename Behavioral/{index.rst => README.rst} (54%) delete mode 100644 Behavioral/Specification/README.md rename Behavioral/Specification/{index.rst => README.rst} (100%) delete mode 100644 Behavioral/State/README.md rename Behavioral/State/{index.rst => README.rst} (100%) delete mode 100644 Behavioral/Strategy/README.md rename Behavioral/Strategy/{index.rst => README.rst} (100%) delete mode 100644 Behavioral/TemplateMethod/README.md rename Behavioral/TemplateMethod/{index.rst => README.rst} (100%) delete mode 100644 Behavioral/Visitor/README.md rename Behavioral/Visitor/{index.rst => README.rst} (100%) delete mode 100644 Creational/AbstractFactory/README.md rename Creational/AbstractFactory/{index.rst => README.rst} (100%) delete mode 100644 Creational/Builder/Parts/README.md delete mode 100644 Creational/Builder/README.md rename Creational/Builder/{index.rst => README.rst} (100%) delete mode 100644 Creational/FactoryMethod/README.md rename Creational/FactoryMethod/{index.rst => README.rst} (100%) delete mode 100644 Creational/Multiton/README.md rename Creational/Multiton/{index.rst => README.rst} (100%) delete mode 100644 Creational/Pool/README.md rename Creational/Pool/{index.rst => README.rst} (100%) delete mode 100644 Creational/Prototype/README.md rename Creational/Prototype/{index.rst => README.rst} (100%) rename Creational/{index.rst => README.rst} (69%) delete mode 100644 Creational/SimpleFactory/README.md rename Creational/SimpleFactory/{index.rst => README.rst} (100%) delete mode 100644 Creational/Singleton/README.md rename Creational/Singleton/{index.rst => README.rst} (100%) delete mode 100644 Creational/StaticFactory/README.md rename Creational/StaticFactory/{index.rst => README.rst} (100%) delete mode 100644 More/Delegation/README.md rename More/Delegation/{index.rst => README.rst} (100%) create mode 100644 More/README.rst delete mode 100644 More/Repository/README.md rename More/Repository/{index.rst => README.rst} (100%) delete mode 100644 More/ServiceLocator/README.md rename More/ServiceLocator/{index.rst => README.rst} (100%) delete mode 100644 More/index.rst rename index.rst => README.rst (97%) delete mode 100644 Structural/Adapter/README.md rename Structural/Adapter/{index.rst => README.rst} (100%) delete mode 100644 Structural/Bridge/README.md rename Structural/Bridge/{index.rst => README.rst} (100%) delete mode 100755 Structural/Composite/README.md rename Structural/Composite/{index.rst => README.rst} (100%) delete mode 100644 Structural/DataMapper/README.md rename Structural/DataMapper/{index.rst => README.rst} (100%) delete mode 100644 Structural/Decorator/README.md rename Structural/Decorator/{index.rst => README.rst} (100%) delete mode 100644 Structural/DependencyInjection/README.md rename Structural/DependencyInjection/{index.rst => README.rst} (100%) delete mode 100644 Structural/Facade/README.md rename Structural/Facade/{index.rst => README.rst} (100%) delete mode 100644 Structural/FluentInterface/README.md rename Structural/FluentInterface/{index.rst => README.rst} (100%) delete mode 100644 Structural/Proxy/README.md rename Structural/Proxy/{index.rst => README.rst} (100%) rename Structural/{index.rst => README.rst} (51%) delete mode 100644 Structural/Registry/README.md rename Structural/Registry/{index.rst => README.rst} (100%) delete mode 100755 read-the-docs.sh diff --git a/Behavioral/ChainOfResponsibilities/README.md b/Behavioral/ChainOfResponsibilities/README.md deleted file mode 100644 index 7657e93..0000000 --- a/Behavioral/ChainOfResponsibilities/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# Chain Of Responsibilities - -## Purpose: - -To build a chain of objects to handle a call in sequential order. If one object cannot handle a call, it delegates the call to the next in the chain and so forth. - -## Examples: - -* logging framework, where each chain element decides autonomously what to do with a log message -* a Spam filter -* Caching: first object is an instance of e.g. a Memcached Interface, if that "misses" it delegates the call to the database interface -* Yii Framework: CFilterChain is a chain of controller action filters. the executing point is passed from one filter to the next along the chain, and only if all filters say "yes", the action can be invoked at last. - -## UML Diagram - -![Alt ChainOfResponsibility UML Diagram](uml/uml.png) diff --git a/Behavioral/ChainOfResponsibilities/index.rst b/Behavioral/ChainOfResponsibilities/README.rst similarity index 100% rename from Behavioral/ChainOfResponsibilities/index.rst rename to Behavioral/ChainOfResponsibilities/README.rst diff --git a/Behavioral/Command/README.md b/Behavioral/Command/README.md deleted file mode 100644 index adf2de3..0000000 --- a/Behavioral/Command/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# Command - -## Purpose - -To encapsulate invocation and decoupling. - -We have an Invoker and a Receiver. This pattern uses a "Command" to delegate the method call against the Receiver and presents the same method "execute". -Therefore, the Invoker just knows to call "execute" to process the Command of the client. The Receiver is decoupled from the Invoker. - -The second aspect of this pattern is the undo(), which undoes the method execute(). -Command can also be aggregated to combine more complex commands with minimum copy-paste and relying on composition over inheritance. - -## Examples - -* A text editor : all events are Command which can be undone, stacked and saved. -* Symfony2: SF2 Commands that can be run from the CLI are built with just the Command pattern in mind -* big CLI tools use subcommands to distribute various tasks and pack them in "modules", each of these can be implemented with the Command pattern (e.g. vagrant) - -## UML Diagram - -![Alt Command UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/Command/index.rst b/Behavioral/Command/README.rst similarity index 100% rename from Behavioral/Command/index.rst rename to Behavioral/Command/README.rst diff --git a/Behavioral/Iterator/README.md b/Behavioral/Iterator/README.md deleted file mode 100644 index 46e96b8..0000000 --- a/Behavioral/Iterator/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# Iterator - -## Purpose - -To make an object iterable and to make it appear like a collection of objects. - -## Examples - -* to process a file line by line by just running over all lines (which have an object representation) for a file (which of course is an object, too) - -## Note - -Standard PHP Library (SPL) defines an interface Iterator which is best suited for this! Often you would want to implement the Countable interface too, to allow `count($object)` on your iterable object - -## UML Diagram - -![Alt Iterator UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/Iterator/index.rst b/Behavioral/Iterator/README.rst similarity index 100% rename from Behavioral/Iterator/index.rst rename to Behavioral/Iterator/README.rst diff --git a/Behavioral/Mediator/README.md b/Behavioral/Mediator/README.md deleted file mode 100644 index 818ff4c..0000000 --- a/Behavioral/Mediator/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Mediator - -## Purpose - -This pattern provides an easy to decouple many components working together. -It is a good alternative over Observer IF you have a "central intelligence", -like a controller (but not in the sense of the MVC). - -All components (called Colleague) are only coupled to the MediatorInterface and -it is a good thing because in OOP, one good friend is better than many. This -is the key-feature of this pattern. - -## UML Diagram - -![Alt Mediator UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/Mediator/index.rst b/Behavioral/Mediator/README.rst similarity index 100% rename from Behavioral/Mediator/index.rst rename to Behavioral/Mediator/README.rst diff --git a/Behavioral/Memento/README.md b/Behavioral/Memento/README.md deleted file mode 100644 index 4e3294e..0000000 --- a/Behavioral/Memento/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# Memento - -## Purpose - -Provide the ability to restore an object to its previous state (undo via rollback). - -The memento pattern is implemented with three objects: the originator, a caretaker and a memento. -The originator is some object that has an internal state. -The caretaker is going to do something to the originator, but wants to be able to undo the change. -The caretaker first asks the originator for a memento object. Then it does whatever operation (or sequence of operations) it was going to do. -To roll back to the state before the operations, it returns the memento object to the originator. -The memento object itself is an opaque object (one which the caretaker cannot, or should not, change). -When using this pattern, care should be taken if the originator may change other objects or resources - the memento pattern operates on a single object. - -## Examples - -* The seed of a pseudorandom number generator -* The state in a finite state machine - -## UML Diagram - -![Alt Momento UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/Memento/index.rst b/Behavioral/Memento/README.rst similarity index 100% rename from Behavioral/Memento/index.rst rename to Behavioral/Memento/README.rst diff --git a/Behavioral/NullObject/README.md b/Behavioral/NullObject/README.md deleted file mode 100644 index 108b07c..0000000 --- a/Behavioral/NullObject/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# Null Object - -## Purpose - -NullObject is not a GoF design pattern but a schema which appears frequently enough to be considered a pattern. It has the following benefits: - -* Client code is simplified -* Reduces the chance of null pointer exceptions -* Fewer conditionals require less test cases - -Methods that return an object or null should instead return an object or `NullObject`. `NullObject`s simplify boilerplate code such as `if (!is_null($obj)) { $obj->callSomething(); }` to just `$obj->callSomething();` by eliminating the conditional check in client code. - -## Examples - -* Symfony2: null logger of profiler -* Symfony2: null output in Symfony/Console -* null handler in a Chain of Responsibilities pattern -* null command in a Command pattern - -## UML Diagram - -![Alt NullObject UML Diagram](uml/uml.png) diff --git a/Behavioral/NullObject/index.rst b/Behavioral/NullObject/README.rst similarity index 100% rename from Behavioral/NullObject/index.rst rename to Behavioral/NullObject/README.rst diff --git a/Behavioral/Observer/README.md b/Behavioral/Observer/README.md deleted file mode 100644 index ccaeaca..0000000 --- a/Behavioral/Observer/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# Observer - -## Purpose - -To implement a publish/subscribe behaviour to an object, whenever a "Subject" object changes it's state, the attached -"Observers" will be notified. It is used to shorten the amount of coupled objects and uses loose coupling instead. - -## Examples - -* a message queue system is observed to show the progress of a job in a GUI - -## Note - -PHP already defines two interfaces that can help to implement this pattern: SplObserver and SplSubject. - -## UML Diagram - -![Alt Observer UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/Observer/index.rst b/Behavioral/Observer/README.rst similarity index 100% rename from Behavioral/Observer/index.rst rename to Behavioral/Observer/README.rst diff --git a/Behavioral/index.rst b/Behavioral/README.rst similarity index 54% rename from Behavioral/index.rst rename to Behavioral/README.rst index 3513745..afd911c 100644 --- a/Behavioral/index.rst +++ b/Behavioral/README.rst @@ -9,15 +9,15 @@ carrying out this communication. .. toctree:: :titlesonly: - ChainOfResponsibilities/index - Command/index - Iterator/index - Mediator/index - Memento/index - NullObject/index - Observer/index - Specification/index - State/index - Strategy/index - TemplateMethod/index - Visitor/index \ No newline at end of file + ChainOfResponsibilities/README + Command/README + Iterator/README + Mediator/README + Memento/README + NullObject/README + Observer/README + Specification/README + State/README + Strategy/README + TemplateMethod/README + Visitor/README \ No newline at end of file diff --git a/Behavioral/Specification/README.md b/Behavioral/Specification/README.md deleted file mode 100644 index 1f55b3b..0000000 --- a/Behavioral/Specification/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# Specification - -## Purpose - -Builds a clear specification of business rules, where objects can be checked against. The composite specification class has -one method called `isSatisfiedBy` that returns either true or false depending on whether the given object satisfies the specification. - -## UML Diagram - -![Alt Specification UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/Specification/index.rst b/Behavioral/Specification/README.rst similarity index 100% rename from Behavioral/Specification/index.rst rename to Behavioral/Specification/README.rst diff --git a/Behavioral/State/README.md b/Behavioral/State/README.md deleted file mode 100644 index 71aff0f..0000000 --- a/Behavioral/State/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# State - -## Purpose - -Encapsulate varying behavior for the same routine based on an object's state. This can be a cleaner way for an object to change its behavior at runtime without resorting to large monolithic conditional statements. - -## UML Diagram - -![Alt State UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/State/index.rst b/Behavioral/State/README.rst similarity index 100% rename from Behavioral/State/index.rst rename to Behavioral/State/README.rst diff --git a/Behavioral/Strategy/README.md b/Behavioral/Strategy/README.md deleted file mode 100644 index 9813487..0000000 --- a/Behavioral/Strategy/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# Strategy - -## Terminology: - -* Context -* Strategy -* Concrete Strategy - -## Purpose - -To separate strategies and to enable fast switching between them. Also this pattern is a good alternative to inheritance (instead of having an abstract class that is extended). - -## Examples - -* sorting a list of objects, one strategy by date, the other by id -* simplify unit testing: e.g. switching between file and in-memory storage - -## UML Diagram - -![Alt Strategy UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/Strategy/index.rst b/Behavioral/Strategy/README.rst similarity index 100% rename from Behavioral/Strategy/index.rst rename to Behavioral/Strategy/README.rst diff --git a/Behavioral/TemplateMethod/README.md b/Behavioral/TemplateMethod/README.md deleted file mode 100644 index c01c00c..0000000 --- a/Behavioral/TemplateMethod/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# Template Method - -## Purpose - -Template Method is a behavioral design pattern. - -Perhaps you have encountered it many times already. The idea is to let subclasses of this abstract template "finish" the behavior of an algorithm. - -A.k.a the "Hollywood principle": "Don't call us, we call you." This class is not called by subclasses but the inverse. -How? With abstraction of course. - -In other words, this is a skeleton of algorithm, well-suited for framework libraries. The user has just to implement one method and the superclass do the job. - -It is an easy way to decouple concrete classes and reduce copy-paste, that's why you'll find it everywhere. - -## UML Diagram - -![Alt TemplateMethod UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/TemplateMethod/index.rst b/Behavioral/TemplateMethod/README.rst similarity index 100% rename from Behavioral/TemplateMethod/index.rst rename to Behavioral/TemplateMethod/README.rst diff --git a/Behavioral/Visitor/README.md b/Behavioral/Visitor/README.md deleted file mode 100644 index 3db1d9c..0000000 --- a/Behavioral/Visitor/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# Visitor - -## Purpose - -The Visitor Pattern lets you outsource operations on objects to other objects. The main reason to do this is to keep a separation of concerns. -But classes have to define a contract to allow visitors (the `Role::accept` method in the example). - -The contract is an abstract class but you can have also a clean interface. In that case, each Visitor has to choose itself which method to invoke on the visitor. - -## UML Diagram - -![Alt Visitor UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Behavioral/Visitor/index.rst b/Behavioral/Visitor/README.rst similarity index 100% rename from Behavioral/Visitor/index.rst rename to Behavioral/Visitor/README.rst diff --git a/Creational/AbstractFactory/README.md b/Creational/AbstractFactory/README.md deleted file mode 100644 index 34d457d..0000000 --- a/Creational/AbstractFactory/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# Abstract Factory - -## Purpose - -To create series of related or dependent objects without specifying their concrete classes. -Usually the created classes all implement the same interface. The client of the abstract factory does not care about how these objects are created, he just knows how they go together. - -## UML Diagram - -![Alt AbstractFactory UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Creational/AbstractFactory/index.rst b/Creational/AbstractFactory/README.rst similarity index 100% rename from Creational/AbstractFactory/index.rst rename to Creational/AbstractFactory/README.rst diff --git a/Creational/Builder/Parts/README.md b/Creational/Builder/Parts/README.md deleted file mode 100644 index 9e802c8..0000000 --- a/Creational/Builder/Parts/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# - -# Purpose - - - -# Examples - -* - diff --git a/Creational/Builder/README.md b/Creational/Builder/README.md deleted file mode 100644 index 573816a..0000000 --- a/Creational/Builder/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# Builder - -## Purpose - -Builder is an interface that build parts of a complex object. - -Sometimes, if the builder has a better knowledge of what it builds, this interface could be an abstract class with default methods (aka adapter). - -If you have a complex inheritance tree for objects, it is logical to have a complex inheritance tree for builders too. - -Note: Builders have often a fluent interface, see the mock builder of PHPUnit for example. - -## Examples - -* PHPUnit: Mock Builder - -## UML Diagram - -![Alt Builder UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Creational/Builder/index.rst b/Creational/Builder/README.rst similarity index 100% rename from Creational/Builder/index.rst rename to Creational/Builder/README.rst diff --git a/Creational/FactoryMethod/README.md b/Creational/FactoryMethod/README.md deleted file mode 100644 index ae4cfb6..0000000 --- a/Creational/FactoryMethod/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Factory Method - -## Purpose - -The good point over the SimpleFactory is you can subclass it to implement different ways to create objects - -For simple case, this abstract class could be just an interface - -This pattern is a "real" Design Pattern because it achieves the "Dependency Inversion Principle" a.k.a the "D" in S.O.L.I.D principles. - -It means the FactoryMethod class depends on abstractions, not concrete classes. This is the real trick compared to SimpleFactory or StaticFactory. - -## UML Diagram - -![Alt FactoryMethod UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Creational/FactoryMethod/index.rst b/Creational/FactoryMethod/README.rst similarity index 100% rename from Creational/FactoryMethod/index.rst rename to Creational/FactoryMethod/README.rst diff --git a/Creational/Multiton/README.md b/Creational/Multiton/README.md deleted file mode 100644 index 26c9a38..0000000 --- a/Creational/Multiton/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# Multiton - -**THIS IS CONSIDERED TO BE AN ANTI-PATTERN! FOR BETTER TESTABILITY AND MAINTAINABILITY USE DEPENDENCY INJECTION!** - -# Purpose - -To have only a list of named instances that are used, like a singleton but with n instances. - -# Examples - -* 2 DB Connectors, e.g. one for MySQL, the other for SQLite -* multiple Loggers (one for debug messages, one for errors) - -## UML Diagram - -![Alt Multiton UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Creational/Multiton/index.rst b/Creational/Multiton/README.rst similarity index 100% rename from Creational/Multiton/index.rst rename to Creational/Multiton/README.rst diff --git a/Creational/Pool/README.md b/Creational/Pool/README.md deleted file mode 100644 index 7229a5a..0000000 --- a/Creational/Pool/README.md +++ /dev/null @@ -1,12 +0,0 @@ -Pool -==== - -The **object pool pattern** is a software creational design pattern that uses a set of initialized objects kept ready to use – a "pool" – rather than allocating and destroying them on demand. A client of the pool will request an object from the pool and perform operations on the returned object. When the client has finished, it returns the object, which is a specific type of factory object, to the pool rather than destroying it. - -Object pooling can offer a significant performance boost in situations where the cost of initializing a class instance is high, the rate of instantiation of a class is high, and the number of instances in use at any one time is low. The pooled object is obtained in predictable time when creation of the new objects (especially over network) may take variable time. - -However these benefits are mostly true for objects that are expensive with respect to time, such as database connections, socket connections, threads and large graphic objects like fonts or bitmaps. In certain situations, simple object pooling (that hold no external resources, but only occupy memory) may not be efficient and could decrease performance. - -## UML Diagram - -![Alt Pool UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Creational/Pool/index.rst b/Creational/Pool/README.rst similarity index 100% rename from Creational/Pool/index.rst rename to Creational/Pool/README.rst diff --git a/Creational/Prototype/README.md b/Creational/Prototype/README.md deleted file mode 100644 index 6244e8a..0000000 --- a/Creational/Prototype/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Prototype - -## Purpose - -To avoid the cost of creating objects the standard way (new Foo()) and instead create a prototype and clone it. - -## Examples - -* Large amounts of data (e.g. create 1,000,000 rows in a database at once via a ORM). - -## UML Diagram - -![Alt Prototype UML Diagram](uml/uml.png) diff --git a/Creational/Prototype/index.rst b/Creational/Prototype/README.rst similarity index 100% rename from Creational/Prototype/index.rst rename to Creational/Prototype/README.rst diff --git a/Creational/index.rst b/Creational/README.rst similarity index 69% rename from Creational/index.rst rename to Creational/README.rst index 6d041a7..72eb5d3 100644 --- a/Creational/index.rst +++ b/Creational/README.rst @@ -11,12 +11,12 @@ this object creation. .. toctree:: :titlesonly: - AbstractFactory/index - Builder/index - FactoryMethod/index - Multiton/index - Pool/index - Prototype/index - SimpleFactory/index - Singleton/index - StaticFactory/index \ No newline at end of file + AbstractFactory/README + Builder/README + FactoryMethod/README + Multiton/README + Pool/README + Prototype/README + SimpleFactory/README + Singleton/README + StaticFactory/README \ No newline at end of file diff --git a/Creational/SimpleFactory/README.md b/Creational/SimpleFactory/README.md deleted file mode 100644 index fedaa9d..0000000 --- a/Creational/SimpleFactory/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Simple Factory - -## Purpose - -ConcreteFactory is a simple factory pattern. - -It differs from the static factory because it is NOT static and as you know: static => global => evil! - -Therefore, you can have multiple factories, differently parametrized, you can subclass it and you can mock-up it. - -## UML Diagram - -![Alt SimpleFactory UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Creational/SimpleFactory/index.rst b/Creational/SimpleFactory/README.rst similarity index 100% rename from Creational/SimpleFactory/index.rst rename to Creational/SimpleFactory/README.rst diff --git a/Creational/Singleton/README.md b/Creational/Singleton/README.md deleted file mode 100644 index b90fcdc..0000000 --- a/Creational/Singleton/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# Singleton - -**THIS IS CONSIDERED TO BE AN ANTI-PATTERN! FOR BETTER TESTABILITY AND MAINTAINABILITY USE DEPENDENCY INJECTION!** - -## Purpose - -To have only one instance of this object in the application that will handle all calls. - -## Examples - -* DB Connector -* Logger (may also be a Multiton if there are many log files for several purposes) -* Lock file for the application (there is only one in the filesystem ...) - -## UML Diagram - -![Alt Singleton UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Creational/Singleton/index.rst b/Creational/Singleton/README.rst similarity index 100% rename from Creational/Singleton/index.rst rename to Creational/Singleton/README.rst diff --git a/Creational/StaticFactory/README.md b/Creational/StaticFactory/README.md deleted file mode 100644 index f5e2710..0000000 --- a/Creational/StaticFactory/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Static Factory - -## Purpose - -Similar to the AbstractFactory, this pattern is used to create series of related or dependent objects. -The difference between this and the abstract factory pattern is that the static factory pattern uses just one static -method to create all types of objects it can create. It is usually named `factory` or `build`. - -## Examples - -* Zend Framework: `Zend_Cache_Backend` or `_Frontend` use a factory method create cache backends or frontends - -## UML Diagram - -![Alt StaticFactory UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Creational/StaticFactory/index.rst b/Creational/StaticFactory/README.rst similarity index 100% rename from Creational/StaticFactory/index.rst rename to Creational/StaticFactory/README.rst diff --git a/More/Delegation/README.md b/More/Delegation/README.md deleted file mode 100644 index c51128c..0000000 --- a/More/Delegation/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Delegation - -## Purpose - -... - -## Examples - -... - -## UML Diagram - -![Alt Delegation UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/More/Delegation/index.rst b/More/Delegation/README.rst similarity index 100% rename from More/Delegation/index.rst rename to More/Delegation/README.rst diff --git a/More/README.rst b/More/README.rst new file mode 100644 index 0000000..b0550f2 --- /dev/null +++ b/More/README.rst @@ -0,0 +1,9 @@ +More +==== + +.. toctree:: + :titlesonly: + + Delegation/README + ServiceLocator/README + Repository/README \ No newline at end of file diff --git a/More/Repository/README.md b/More/Repository/README.md deleted file mode 100644 index 0e2b188..0000000 --- a/More/Repository/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# Repository - -## Purpose - -Mediates between the domain and data mapping layers using a collection-like interface for accessing domain objects. -Repository encapsulates the set of objects persisted in a data store and the operations performed over them, providing a more object-oriented view of the persistence layer. -Repository also supports the objective of achieving a clean separation and one-way dependency between the domain and data mapping layers. - -## Examples - -* Doctrine 2 ORM: there is Repository that mediates between Entity and DBAL and contains methods to retrieve objects -* Laravel Framework - -## UML Diagram - -![Alt Repository UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/More/Repository/index.rst b/More/Repository/README.rst similarity index 100% rename from More/Repository/index.rst rename to More/Repository/README.rst diff --git a/More/ServiceLocator/README.md b/More/ServiceLocator/README.md deleted file mode 100644 index cdee496..0000000 --- a/More/ServiceLocator/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# Service Locator - -## Purpose - -To implement a loosely coupled architecture in order to get better testable, maintainable and extendable code. -DI pattern and Service Locator pattern are an implementation of the Inverse of Control pattern. - -## Usage - -With `ServiceLocator` you can register a service for a given interface. By using the interface you can retrieve the service -and use it in the classes of the application without knowing its implementation. You can configure and inject the -Service Locator object on bootstrap. - -## Examples - -* Zend Framework 2 uses Service Locator to create and share services used in the framework(i.e. EventManager, ModuleManager, all custom user services provided by modules, etc...) - -## UML Diagram - -![Alt ServiceLocator UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/More/ServiceLocator/index.rst b/More/ServiceLocator/README.rst similarity index 100% rename from More/ServiceLocator/index.rst rename to More/ServiceLocator/README.rst diff --git a/More/index.rst b/More/index.rst deleted file mode 100644 index 6ba85d3..0000000 --- a/More/index.rst +++ /dev/null @@ -1,9 +0,0 @@ -More -==== - -.. toctree:: - :titlesonly: - - Delegation/index - ServiceLocator/index - Repository/index \ No newline at end of file diff --git a/index.rst b/README.rst similarity index 97% rename from index.rst rename to README.rst index fbda3c9..cf83385 100644 --- a/index.rst +++ b/README.rst @@ -26,10 +26,10 @@ Please click on **the title of every pattern's page** for a full explanation of :titlesonly: :numbered: - Creational/index - Structural/index - Behavioral/index - More/index + Creational/README + Structural/README + Behavioral/README + More/README Contribute ---------- diff --git a/Structural/Adapter/README.md b/Structural/Adapter/README.md deleted file mode 100644 index d2390df..0000000 --- a/Structural/Adapter/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# Adapter / Wrapper - -## Purpose - -To translate one interface for a class into a compatible interface. An adapter allows classes to work together that normally could not because of incompatible interfaces by providing it's interface to clients while using the original interface. - -## Examples - -* DB Client libraries adapter -* using multiple different webservices and adapters normalize data so that the outcome is the same for all - -## UML Diagram - -![Alt Adapter UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Structural/Adapter/index.rst b/Structural/Adapter/README.rst similarity index 100% rename from Structural/Adapter/index.rst rename to Structural/Adapter/README.rst diff --git a/Structural/Bridge/README.md b/Structural/Bridge/README.md deleted file mode 100644 index b4bf4fd..0000000 --- a/Structural/Bridge/README.md +++ /dev/null @@ -1,12 +0,0 @@ -## Purpose - -Decouple an abstraction from its implementation so that the two can vary -independently. (http://en.wikipedia.org/wiki/Bridge_pattern) - -#### Sample: - -* [Symfony DoctrineBridge](https://github.com/symfony/DoctrineBridge) - -## UML Diagram - -![Alt Bridge UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Structural/Bridge/index.rst b/Structural/Bridge/README.rst similarity index 100% rename from Structural/Bridge/index.rst rename to Structural/Bridge/README.rst diff --git a/Structural/Composite/README.md b/Structural/Composite/README.md deleted file mode 100755 index f0ca01c..0000000 --- a/Structural/Composite/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Composite - -# Purpose - -To treat a group of objects the same way as a single instance of the object. - -# Examples - -* a form class instance handles all its form elements like a single instance of the form, when `render()` is called, it - subsequently runs through all its child elements and calls `render()` on them -* `Zend_Config`: a tree of configuration options, each one is a `Zend_Config` object itself - -## UML Diagram - -![Alt Composite UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Structural/Composite/index.rst b/Structural/Composite/README.rst similarity index 100% rename from Structural/Composite/index.rst rename to Structural/Composite/README.rst diff --git a/Structural/DataMapper/README.md b/Structural/DataMapper/README.md deleted file mode 100644 index 70efe20..0000000 --- a/Structural/DataMapper/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# Data Mapper - -## Purpose - -A Data Mapper, is a Data Access Layer that performs bidirectional transfer of -data between a persistent data store (often a relational database) and an in -memory data representation (the domain layer). The goal of the pattern is to -keep the in memory representation and the persistent data store independent of -each other and the data mapper itself. The layer is composed of one or more -mappers (or Data Access Objects), performing the data transfer. Mapper -implementations vary in scope. Generic mappers will handle many different domain -entity types, dedicated mappers will handle one or a few. - -The key point of this pattern is, unlike Active Record pattern, the data model follows Single Responsibility Principle. - -## Examples - -* DB Object Relational Mapper (ORM) : Doctrine2 uses DAO named as "EntityRepository" - -## UML Diagram - -![Alt DataMapper UML Diagram](uml/uml.png) diff --git a/Structural/DataMapper/index.rst b/Structural/DataMapper/README.rst similarity index 100% rename from Structural/DataMapper/index.rst rename to Structural/DataMapper/README.rst diff --git a/Structural/Decorator/README.md b/Structural/Decorator/README.md deleted file mode 100644 index 4eedd89..0000000 --- a/Structural/Decorator/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# Decorator - -## Purpose - -To dynamically add new functionality to class instances. - -## Examples - -* Zend Framework: decorators for `Zend_Form_Element` instances -* Web Service Layer: Decorators JSON and XML for a REST service (in this case, only one of these should be allowed of course) - -## UML Diagram - -![Alt Decorator UML Diagram](uml/uml.png) diff --git a/Structural/Decorator/index.rst b/Structural/Decorator/README.rst similarity index 100% rename from Structural/Decorator/index.rst rename to Structural/Decorator/README.rst diff --git a/Structural/DependencyInjection/README.md b/Structural/DependencyInjection/README.md deleted file mode 100644 index 185a550..0000000 --- a/Structural/DependencyInjection/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# Dependency Injection - -## Purpose - -To implement a loosely coupled architecture in order to get better testable, maintainable and extendable code. - -## Usage - -Configuration gets injected and `Connection` will get all that it needs from `$config`. Without DI, the configuration would be created directly in `Connection`, which is not very good for testing and extending `Connection`. - -Notice we are following Inversion of control principle in `Connection` by asking `$config` to implement `Parameters` interface. This decouples our components. We don't care where the source of information comes from, we only care that `$config` has certain methods to retrieve that information. Read more about Inversion of control [here](http://en.wikipedia.org/wiki/Inversion_of_control). - -## Examples - -* The Doctrine2 ORM uses dependency injection e.g. for configuration that is injected into a `Connection` object. For testing purposes, one can easily create a mock object of the configuration and inject that into the `Connection` object -* Symfony and Zend Framework 2 already have containers for DI that create objects via a configuration array and inject them where needed (i.e. in Controllers) - -## UML Diagram - -![Alt DependencyInjection UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Structural/DependencyInjection/index.rst b/Structural/DependencyInjection/README.rst similarity index 100% rename from Structural/DependencyInjection/index.rst rename to Structural/DependencyInjection/README.rst diff --git a/Structural/Facade/README.md b/Structural/Facade/README.md deleted file mode 100644 index 4a9019c..0000000 --- a/Structural/Facade/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# Facade - -## Purpose - -The primary goal of a Facade Pattern is not to avoid you to read the manual of a complex API. It's only a side-effect. -The first goal is to reduce coupling and follow the Law of Demeter. - -A Facade is meant to decouple a client and a sub-system by embedding many (but sometimes just one) interface, and of course to reduce complexity. - -* A facade does not forbid you the access to the sub-system -* You can (you should) have multiple facades for one sub-system - -That's why a good facade has no `new` in it. If there are multiple creations for each method, it is not a Facade, it's a Builder or a -[Abstract|Static|Simple] Factory [Method]. - -The best facade has no `new` and a constructor with interface-type-hinted parameters. -If you need creation of new instances, use a Factory as argument. - -## UML Diagram - -![Alt Facade UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Structural/Facade/index.rst b/Structural/Facade/README.rst similarity index 100% rename from Structural/Facade/index.rst rename to Structural/Facade/README.rst diff --git a/Structural/FluentInterface/README.md b/Structural/FluentInterface/README.md deleted file mode 100644 index 2ed92d3..0000000 --- a/Structural/FluentInterface/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Fluent Interface - -## Purpose - -To write code that is easy readable just like sentences in a natural language (like English). - -## Examples - -* Doctrine2's QueryBuilder works something like that example class below -* PHPUnit uses fluent interfaces to build mock objects -* Yii Framework: CDbCommand and CActiveRecord use this pattern, too - -## UML Diagram - -![Alt FluentInterface UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Structural/FluentInterface/index.rst b/Structural/FluentInterface/README.rst similarity index 100% rename from Structural/FluentInterface/index.rst rename to Structural/FluentInterface/README.rst diff --git a/Structural/Proxy/README.md b/Structural/Proxy/README.md deleted file mode 100644 index b4c0e39..0000000 --- a/Structural/Proxy/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Proxy - -## Purpose - -To interface to anything that is expensive or impossible to duplicate. - -## Examples - -* Doctrine2 uses proxies to implement framework magic (e.g. lazy initialization) in them, while the user still works with his own entity classes and will never use nor touch the proxies - -## UML Diagram - -![Alt Proxy UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Structural/Proxy/index.rst b/Structural/Proxy/README.rst similarity index 100% rename from Structural/Proxy/index.rst rename to Structural/Proxy/README.rst diff --git a/Structural/index.rst b/Structural/README.rst similarity index 51% rename from Structural/index.rst rename to Structural/README.rst index 6505413..47b6650 100644 --- a/Structural/index.rst +++ b/Structural/README.rst @@ -8,13 +8,13 @@ relationships between entities. .. toctree:: :titlesonly: - Adapter/index - Bridge/index - Composite/index - DataMapper/index - Decorator/index - DependencyInjection/index - Facade/index - FluentInterface/index - Proxy/index - Registry/index \ No newline at end of file + Adapter/README + Bridge/README + Composite/README + DataMapper/README + Decorator/README + DependencyInjection/README + Facade/README + FluentInterface/README + Proxy/README + Registry/README \ No newline at end of file diff --git a/Structural/Registry/README.md b/Structural/Registry/README.md deleted file mode 100644 index 840d2cf..0000000 --- a/Structural/Registry/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Registry - -## Purpose - -To implement a central storage for objects often used throughout the application, is typically implemented using -an abstract class with only static methods (or using the Singleton pattern) - -## Examples - -* Zend Framework: `Zend_Registry` holds the application's logger object, front controller etc. -* Yii Framework: `CWebApplication` holds all the application components, such as `CWebUser`, `CUrlManager`, etc. - -## UML Diagram - -![Alt Registry UML Diagram](uml/uml.png) \ No newline at end of file diff --git a/Structural/Registry/index.rst b/Structural/Registry/README.rst similarity index 100% rename from Structural/Registry/index.rst rename to Structural/Registry/README.rst diff --git a/conf.py b/conf.py index 5ae01ae..6df45f4 100644 --- a/conf.py +++ b/conf.py @@ -43,7 +43,7 @@ source_suffix = '.rst' #source_encoding = 'utf-8-sig' # The master toctree document. -master_doc = 'index' +master_doc = 'README' # General information about the project. project = u'DesignPatternsPHP' diff --git a/read-the-docs.sh b/read-the-docs.sh deleted file mode 100755 index e868670..0000000 --- a/read-the-docs.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/bash - -# Step 1 use pandoc to convert README.md to index.rst -find . -type f -name "README.md" \ - -execdir pandoc -f markdown -t rst -s -o "index.rst" {} \; \ -# -delete - -# Step 2 move uml/* of every pattern to images/path_to_pattern/uml/* -#find . -type d -name "uml" \ -# -exec bash -c 'mkdir -p images/${1:2}' funcname {} \; \ -# -exec bash -c 'mv ${1}/* images/${1:2}' funcname {} \; \ -# -delete - -# Step 3 change the content of index.rst -# embed php files in index.rst -for INDEX in $(find . -type f -name "index.rst") -do - # fix figure to image, add align center - sed -i "s|.. figure::|.. image::|g" ${INDEX} - sed -i "/:alt:/{n;d}" ${INDEX} - sed -i "s| Alt.*| :align: center|" ${INDEX} - - BASEDIR=$(dirname ${INDEX}) - - # fix image path uml/uml.png to images/path_to_pattern/uml/uml.png - # sed -i "s|uml/uml.png|/images/${BASEDIR:2}/uml/uml.png|g" ${INDEX} - - # embed pattern files - echo -e "\nCode\n----\n" >> ${INDEX} - echo -e "You can also find these code on \`GitHub\`_\n" >> ${INDEX} - - for PHPFILE in $(find ${BASEDIR} -maxdepth 1 -type f -name "*.php") - do - echo -e "$(basename ${PHPFILE})\n" >> ${INDEX} - echo -e ".. literalinclude:: $(basename ${PHPFILE})\n :language: php\n :linenos:\n" >> ${INDEX} - done - - # embed test files - echo -e "Test\n----\n" >> ${INDEX} - - for TESTFILE in $(find ${BASEDIR}/Tests -maxdepth 1 -type f -name "*.php") - do - echo -e "Tests/$(basename ${TESTFILE})\n" >> ${INDEX} - echo -e ".. literalinclude:: Tests/$(basename ${TESTFILE})\n :language: php\n :linenos:\n" >> ${INDEX} - done - - # add link on GitHub of this pattern - echo -e ".. _\`GitHub\`: https://github.com/domnikl/DesignPatternsPHP/tree/master/${BASEDIR:2}" >> ${INDEX} -done - -# Step 4 embed other php files in index.rst -# fix TocTree of projet \ No newline at end of file From 23abee807817c52ad3b8566445f82c442c9d784e Mon Sep 17 00:00:00 2001 From: Faust Date: Tue, 7 Apr 2015 22:00:12 +0200 Subject: [PATCH 020/127] sort php files Creational --- Behavioral/README.rst | 2 +- Creational/AbstractFactory/README.rst | 38 +++++++-------- Creational/Builder/README.rst | 58 +++++++++++------------ Creational/FactoryMethod/README.rst | 22 ++++----- Creational/Pool/README.rst | 12 ++--- Creational/Prototype/README.rst | 14 +++--- Creational/README.rst | 2 +- Creational/SimpleFactory/README.rst | 12 ++--- Creational/Singleton/README.rst | 2 +- More/Delegation/README.rst | 2 +- More/README.rst | 2 +- More/ServiceLocator/README.rst | 2 +- README.rst | 11 +++-- Structural/Adapter/README.rst | 2 +- Structural/Bridge/README.rst | 2 +- Structural/Composite/README.rst | 2 +- Structural/DataMapper/README.rst | 2 +- Structural/Decorator/README.rst | 2 +- Structural/DependencyInjection/README.rst | 2 +- Structural/Facade/README.rst | 2 +- Structural/Proxy/README.rst | 2 +- Structural/README.rst | 2 +- Structural/Registry/README.rst | 2 +- 23 files changed, 100 insertions(+), 99 deletions(-) diff --git a/Behavioral/README.rst b/Behavioral/README.rst index afd911c..646df1f 100644 --- a/Behavioral/README.rst +++ b/Behavioral/README.rst @@ -20,4 +20,4 @@ carrying out this communication. State/README Strategy/README TemplateMethod/README - Visitor/README \ No newline at end of file + Visitor/README diff --git a/Creational/AbstractFactory/README.rst b/Creational/AbstractFactory/README.rst index 9942e4c..3e6d7ef 100644 --- a/Creational/AbstractFactory/README.rst +++ b/Creational/AbstractFactory/README.rst @@ -21,9 +21,9 @@ Code You can also find these code on `GitHub`_ -Text.php +AbstractFactory.php -.. literalinclude:: Text.php +.. literalinclude:: AbstractFactory.php :language: php :linenos: @@ -33,9 +33,9 @@ JsonFactory.php :language: php :linenos: -AbstractFactory.php +HtmlFactory.php -.. literalinclude:: AbstractFactory.php +.. literalinclude:: HtmlFactory.php :language: php :linenos: @@ -45,27 +45,15 @@ MediaInterface.php :language: php :linenos: -HtmlFactory.php - -.. literalinclude:: HtmlFactory.php - :language: php - :linenos: - Picture.php .. literalinclude:: Picture.php :language: php :linenos: -Html/Picture.php +Text.php -.. literalinclude:: Html/Picture.php - :language: php - :linenos: - -Html/Text.php - -.. literalinclude:: Html/Text.php +.. literalinclude:: Text.php :language: php :linenos: @@ -81,6 +69,18 @@ Json/Text.php :language: php :linenos: +Html/Picture.php + +.. literalinclude:: Html/Picture.php + :language: php + :linenos: + +Html/Text.php + +.. literalinclude:: Html/Text.php + :language: php + :linenos: + Test ---- @@ -91,4 +91,4 @@ Tests/AbstractFactoryTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/AbstractFactory -.. _`Abstract Factory`: http://en.wikipedia.org/wiki/Abstract_factory_pattern \ No newline at end of file +.. _`Abstract Factory`: http://en.wikipedia.org/wiki/Abstract_factory_pattern diff --git a/Creational/Builder/README.rst b/Creational/Builder/README.rst index 03a1030..85b38ea 100644 --- a/Creational/Builder/README.rst +++ b/Creational/Builder/README.rst @@ -32,27 +32,51 @@ Code You can also find these code on `GitHub`_ +Director.php + +.. literalinclude:: Director.php + :language: php + :linenos: + BuilderInterface.php .. literalinclude:: BuilderInterface.php :language: php :linenos: +BikeBuilder.php + +.. literalinclude:: BikeBuilder.php + :language: php + :linenos: + CarBuilder.php .. literalinclude:: CarBuilder.php :language: php :linenos: -Director.php +Parts/Vehicle.php -.. literalinclude:: Director.php +.. literalinclude:: Parts/Vehicle.php :language: php :linenos: -BikeBuilder.php +Parts/Bike.php -.. literalinclude:: BikeBuilder.php +.. literalinclude:: Parts/Bike.php + :language: php + :linenos: + +Parts/Car.php + +.. literalinclude:: Parts/Car.php + :language: php + :linenos: + +Parts/Engine.php + +.. literalinclude:: Parts/Engine.php :language: php :linenos: @@ -68,30 +92,6 @@ Parts/Door.php :language: php :linenos: -Parts/Car.php - -.. literalinclude:: Parts/Car.php - :language: php - :linenos: - -Parts/Bike.php - -.. literalinclude:: Parts/Bike.php - :language: php - :linenos: - -Parts/Vehicle.php - -.. literalinclude:: Parts/Vehicle.php - :language: php - :linenos: - -Parts/Engine.php - -.. literalinclude:: Parts/Engine.php - :language: php - :linenos: - Test ---- @@ -102,4 +102,4 @@ Tests/DirectorTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/Builder -.. _`Builder`: http://en.wikipedia.org/wiki/Builder_pattern \ No newline at end of file +.. _`Builder`: http://en.wikipedia.org/wiki/Builder_pattern diff --git a/Creational/FactoryMethod/README.rst b/Creational/FactoryMethod/README.rst index 7552078..6ec224e 100644 --- a/Creational/FactoryMethod/README.rst +++ b/Creational/FactoryMethod/README.rst @@ -28,15 +28,9 @@ Code You can also find these code on `GitHub`_ -Porsche.php +FactoryMethod.php -.. literalinclude:: Porsche.php - :language: php - :linenos: - -GermanFactory.php - -.. literalinclude:: GermanFactory.php +.. literalinclude:: FactoryMethod.php :language: php :linenos: @@ -46,15 +40,21 @@ ItalianFactory.php :language: php :linenos: +GermanFactory.php + +.. literalinclude:: GermanFactory.php + :language: php + :linenos: + VehicleInterface.php .. literalinclude:: VehicleInterface.php :language: php :linenos: -FactoryMethod.php +Porsche.php -.. literalinclude:: FactoryMethod.php +.. literalinclude:: Porsche.php :language: php :linenos: @@ -80,4 +80,4 @@ Tests/FactoryMethodTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/FactoryMethod -.. _`Factory Method`: http://en.wikipedia.org/wiki/Factory_method_pattern \ No newline at end of file +.. _`Factory Method`: http://en.wikipedia.org/wiki/Factory_method_pattern diff --git a/Creational/Pool/README.rst b/Creational/Pool/README.rst index 6912c72..260d3b0 100644 --- a/Creational/Pool/README.rst +++ b/Creational/Pool/README.rst @@ -54,17 +54,17 @@ Worker.php Test ---- -Tests/TestWorker.php - -.. literalinclude:: Tests/TestWorker.php - :language: php - :linenos: - Tests/PoolTest.php .. literalinclude:: Tests/PoolTest.php :language: php :linenos: +Tests/TestWorker.php + +.. literalinclude:: Tests/TestWorker.php + :language: php + :linenos: + .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/Pool .. _`Pool`: http://en.wikipedia.org/wiki/Object_pool_pattern diff --git a/Creational/Prototype/README.rst b/Creational/Prototype/README.rst index 5485edd..64c558d 100644 --- a/Creational/Prototype/README.rst +++ b/Creational/Prototype/README.rst @@ -25,6 +25,12 @@ Code You can also find these code on `GitHub`_ +index.php + +.. literalinclude:: index.php + :language: php + :linenos: + BookPrototype.php .. literalinclude:: BookPrototype.php @@ -37,12 +43,6 @@ BarBookPrototype.php :language: php :linenos: -index.php - -.. literalinclude:: index.php - :language: php - :linenos: - FooBookPrototype.php .. literalinclude:: FooBookPrototype.php @@ -53,4 +53,4 @@ Test ---- .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/Prototype -.. _`Prototype`: http://en.wikipedia.org/wiki/Prototype_pattern \ No newline at end of file +.. _`Prototype`: http://en.wikipedia.org/wiki/Prototype_pattern diff --git a/Creational/README.rst b/Creational/README.rst index 72eb5d3..d908772 100644 --- a/Creational/README.rst +++ b/Creational/README.rst @@ -19,4 +19,4 @@ this object creation. Prototype/README SimpleFactory/README Singleton/README - StaticFactory/README \ No newline at end of file + StaticFactory/README diff --git a/Creational/SimpleFactory/README.rst b/Creational/SimpleFactory/README.rst index ff55711..364947f 100644 --- a/Creational/SimpleFactory/README.rst +++ b/Creational/SimpleFactory/README.rst @@ -36,18 +36,18 @@ VehicleInterface.php :language: php :linenos: -Scooter.php - -.. literalinclude:: Scooter.php - :language: php - :linenos: - Bicycle.php .. literalinclude:: Bicycle.php :language: php :linenos: +Scooter.php + +.. literalinclude:: Scooter.php + :language: php + :linenos: + Test ---- diff --git a/Creational/Singleton/README.rst b/Creational/Singleton/README.rst index 319364e..4ec37ae 100644 --- a/Creational/Singleton/README.rst +++ b/Creational/Singleton/README.rst @@ -47,4 +47,4 @@ Tests/SingletonTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/Singleton -.. _`Singleton`: http://en.wikipedia.org/wiki/Singleton_pattern \ No newline at end of file +.. _`Singleton`: http://en.wikipedia.org/wiki/Singleton_pattern diff --git a/More/Delegation/README.rst b/More/Delegation/README.rst index 149cddf..51b05fc 100644 --- a/More/Delegation/README.rst +++ b/More/Delegation/README.rst @@ -51,4 +51,4 @@ Tests/DelegationTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/More/Delegation -.. _`Delegation`: http://en.wikipedia.org/wiki/Delegation_pattern \ No newline at end of file +.. _`Delegation`: http://en.wikipedia.org/wiki/Delegation_pattern diff --git a/More/README.rst b/More/README.rst index b0550f2..dbab1f6 100644 --- a/More/README.rst +++ b/More/README.rst @@ -6,4 +6,4 @@ More Delegation/README ServiceLocator/README - Repository/README \ No newline at end of file + Repository/README diff --git a/More/ServiceLocator/README.rst b/More/ServiceLocator/README.rst index 2972391..f7e69a2 100644 --- a/More/ServiceLocator/README.rst +++ b/More/ServiceLocator/README.rst @@ -81,4 +81,4 @@ Tests/ServiceLocatorTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/More/ServiceLocator -.. _`Service Locator`: http://en.wikipedia.org/wiki/Service_locator_pattern \ No newline at end of file +.. _`Service Locator`: http://en.wikipedia.org/wiki/Service_locator_pattern diff --git a/README.rst b/README.rst index cf83385..3db54a9 100644 --- a/README.rst +++ b/README.rst @@ -37,9 +37,7 @@ Contribute Please feel free to fork and extend existing or add your own examples and send a pull request with your changes! To establish a consistent code quality, please check your code using -`PHP\_CodeSniffer `__ -against `PSR2 -standard `__ +`PHP CodeSniffer`_ against `PSR2 standard`_ using ``./vendor/bin/phpcs -p --standard=PSR2 --ignore=vendor .``. License @@ -47,8 +45,7 @@ License (The MIT License) -Copyright (c) 2014 Dominik Liebler and -`contributors `__ +Copyright (c) 2014 `Dominik Liebler`_ and `contributors`_ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the @@ -70,3 +67,7 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. .. _`design patterns`: http://en.wikipedia.org/wiki/Software_design_pattern +.. _`PHP CodeSniffer`: https://github.com/squizlabs/PHP_CodeSniffer +.. _`PSR2 standard`: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md +.. _`Dominik Liebler`: https://github.com/domnikl +.. _`contributors`: https://github.com/domnikl/DesignPatternsPHP/graphs/contributors diff --git a/Structural/Adapter/README.rst b/Structural/Adapter/README.rst index 2aa2ea5..5136d07 100644 --- a/Structural/Adapter/README.rst +++ b/Structural/Adapter/README.rst @@ -68,4 +68,4 @@ Tests/AdapterTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Adapter -.. _`Adapter / Wrapper`: http://en.wikipedia.org/wiki/Adapter_pattern \ No newline at end of file +.. _`Adapter / Wrapper`: http://en.wikipedia.org/wiki/Adapter_pattern diff --git a/Structural/Bridge/README.rst b/Structural/Bridge/README.rst index 62b8056..1de59d8 100644 --- a/Structural/Bridge/README.rst +++ b/Structural/Bridge/README.rst @@ -71,4 +71,4 @@ Tests/BridgeTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Bridge -.. _`Bridge`: http://en.wikipedia.org/wiki/Bridge_pattern \ No newline at end of file +.. _`Bridge`: http://en.wikipedia.org/wiki/Bridge_pattern diff --git a/Structural/Composite/README.rst b/Structural/Composite/README.rst index 6c4af7d..432647e 100644 --- a/Structural/Composite/README.rst +++ b/Structural/Composite/README.rst @@ -62,4 +62,4 @@ Tests/CompositeTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Composite -.. _`Composite`: http://en.wikipedia.org/wiki/Composite_pattern \ No newline at end of file +.. _`Composite`: http://en.wikipedia.org/wiki/Composite_pattern diff --git a/Structural/DataMapper/README.rst b/Structural/DataMapper/README.rst index dcc24de..83ba501 100644 --- a/Structural/DataMapper/README.rst +++ b/Structural/DataMapper/README.rst @@ -57,4 +57,4 @@ Tests/DataMapperTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/DataMapper -.. _`Data Mapper`: http://en.wikipedia.org/wiki/Data_mapper_pattern \ No newline at end of file +.. _`Data Mapper`: http://en.wikipedia.org/wiki/Data_mapper_pattern diff --git a/Structural/Decorator/README.rst b/Structural/Decorator/README.rst index cb9d92b..95d234c 100644 --- a/Structural/Decorator/README.rst +++ b/Structural/Decorator/README.rst @@ -65,4 +65,4 @@ Tests/DecoratorTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Decorator -.. _`Decorator`: http://en.wikipedia.org/wiki/Decorator_pattern \ No newline at end of file +.. _`Decorator`: http://en.wikipedia.org/wiki/Decorator_pattern diff --git a/Structural/DependencyInjection/README.rst b/Structural/DependencyInjection/README.rst index bc7ddff..8200cc1 100644 --- a/Structural/DependencyInjection/README.rst +++ b/Structural/DependencyInjection/README.rst @@ -85,4 +85,4 @@ Tests/config.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/DependencyInjection -.. _`Dependency Injection`: http://en.wikipedia.org/wiki/Dependency_injection \ No newline at end of file +.. _`Dependency Injection`: http://en.wikipedia.org/wiki/Dependency_injection diff --git a/Structural/Facade/README.rst b/Structural/Facade/README.rst index e2baeca..5be63e7 100644 --- a/Structural/Facade/README.rst +++ b/Structural/Facade/README.rst @@ -63,4 +63,4 @@ Tests/FacadeTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Facade -.. _`Facade`: http://en.wikipedia.org/wiki/Facade_pattern \ No newline at end of file +.. _`Facade`: http://en.wikipedia.org/wiki/Facade_pattern diff --git a/Structural/Proxy/README.rst b/Structural/Proxy/README.rst index 4ff818e..f9aa24e 100644 --- a/Structural/Proxy/README.rst +++ b/Structural/Proxy/README.rst @@ -41,4 +41,4 @@ Test ---- .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Proxy -.. _`Proxy`: http://en.wikipedia.org/wiki/Proxy_pattern \ No newline at end of file +.. _`Proxy`: http://en.wikipedia.org/wiki/Proxy_pattern diff --git a/Structural/README.rst b/Structural/README.rst index 47b6650..f717b4a 100644 --- a/Structural/README.rst +++ b/Structural/README.rst @@ -17,4 +17,4 @@ relationships between entities. Facade/README FluentInterface/README Proxy/README - Registry/README \ No newline at end of file + Registry/README diff --git a/Structural/Registry/README.rst b/Structural/Registry/README.rst index f09bd2f..e95ed26 100644 --- a/Structural/Registry/README.rst +++ b/Structural/Registry/README.rst @@ -44,4 +44,4 @@ Tests/RegistryTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Registry -.. _`Registry`: http://en.wikipedia.org/wiki/Service_locator_pattern \ No newline at end of file +.. _`Registry`: http://en.wikipedia.org/wiki/Service_locator_pattern From 321041b2105eea14bfac4aee899afa1cdd510286 Mon Sep 17 00:00:00 2001 From: Faust Date: Wed, 8 Apr 2015 22:42:16 +0200 Subject: [PATCH 021/127] sort php files Structural --- Structural/Adapter/README.rst | 12 ++++++------ Structural/Bridge/README.rst | 24 +++++++++++------------ Structural/DataMapper/README.rst | 12 ++++++------ Structural/Decorator/README.rst | 24 +++++++++++------------ Structural/DependencyInjection/README.rst | 24 +++++++++++------------ Structural/Facade/README.rst | 12 ++++++------ Structural/Proxy/README.rst | 12 ++++++------ conf.py | 6 +++--- 8 files changed, 63 insertions(+), 63 deletions(-) diff --git a/Structural/Adapter/README.rst b/Structural/Adapter/README.rst index 5136d07..dacd97e 100644 --- a/Structural/Adapter/README.rst +++ b/Structural/Adapter/README.rst @@ -34,9 +34,9 @@ PaperBookInterface.php :language: php :linenos: -EBookInterface.php +Book.php -.. literalinclude:: EBookInterface.php +.. literalinclude:: Book.php :language: php :linenos: @@ -46,15 +46,15 @@ EBookAdapter.php :language: php :linenos: -Kindle.php +EBookInterface.php -.. literalinclude:: Kindle.php +.. literalinclude:: EBookInterface.php :language: php :linenos: -Book.php +Kindle.php -.. literalinclude:: Book.php +.. literalinclude:: Kindle.php :language: php :linenos: diff --git a/Structural/Bridge/README.rst b/Structural/Bridge/README.rst index 1de59d8..b92fd1c 100644 --- a/Structural/Bridge/README.rst +++ b/Structural/Bridge/README.rst @@ -25,27 +25,21 @@ Code You can also find these code on `GitHub`_ -Assemble.php - -.. literalinclude:: Assemble.php - :language: php - :linenos: - Workshop.php .. literalinclude:: Workshop.php :language: php :linenos: -Car.php +Assemble.php -.. literalinclude:: Car.php +.. literalinclude:: Assemble.php :language: php :linenos: -Motorcycle.php +Produce.php -.. literalinclude:: Motorcycle.php +.. literalinclude:: Produce.php :language: php :linenos: @@ -55,9 +49,15 @@ Vehicle.php :language: php :linenos: -Produce.php +Motorcycle.php -.. literalinclude:: Produce.php +.. literalinclude:: Motorcycle.php + :language: php + :linenos: + +Car.php + +.. literalinclude:: Car.php :language: php :linenos: diff --git a/Structural/DataMapper/README.rst b/Structural/DataMapper/README.rst index 83ba501..7fca1e9 100644 --- a/Structural/DataMapper/README.rst +++ b/Structural/DataMapper/README.rst @@ -35,18 +35,18 @@ Code You can also find these code on `GitHub`_ -UserMapper.php - -.. literalinclude:: UserMapper.php - :language: php - :linenos: - User.php .. literalinclude:: User.php :language: php :linenos: +UserMapper.php + +.. literalinclude:: UserMapper.php + :language: php + :linenos: + Test ---- diff --git a/Structural/Decorator/README.rst b/Structural/Decorator/README.rst index 95d234c..b40ac69 100644 --- a/Structural/Decorator/README.rst +++ b/Structural/Decorator/README.rst @@ -31,30 +31,30 @@ RendererInterface.php :language: php :linenos: -RenderInXml.php - -.. literalinclude:: RenderInXml.php - :language: php - :linenos: - Webservice.php .. literalinclude:: Webservice.php :language: php :linenos: -RenderInJson.php - -.. literalinclude:: RenderInJson.php - :language: php - :linenos: - Decorator.php .. literalinclude:: Decorator.php :language: php :linenos: +RenderInXml.php + +.. literalinclude:: RenderInXml.php + :language: php + :linenos: + +RenderInJson.php + +.. literalinclude:: RenderInJson.php + :language: php + :linenos: + Test ---- diff --git a/Structural/DependencyInjection/README.rst b/Structural/DependencyInjection/README.rst index 8200cc1..2446c2c 100644 --- a/Structural/DependencyInjection/README.rst +++ b/Structural/DependencyInjection/README.rst @@ -45,18 +45,6 @@ Code You can also find these code on `GitHub`_ -Connection.php - -.. literalinclude:: Connection.php - :language: php - :linenos: - -ArrayConfig.php - -.. literalinclude:: ArrayConfig.php - :language: php - :linenos: - AbstractConfig.php .. literalinclude:: AbstractConfig.php @@ -69,6 +57,18 @@ Parameters.php :language: php :linenos: +ArrayConfig.php + +.. literalinclude:: ArrayConfig.php + :language: php + :linenos: + +Connection.php + +.. literalinclude:: Connection.php + :language: php + :linenos: + Test ---- diff --git a/Structural/Facade/README.rst b/Structural/Facade/README.rst index 5be63e7..1148b5e 100644 --- a/Structural/Facade/README.rst +++ b/Structural/Facade/README.rst @@ -35,18 +35,18 @@ Code You can also find these code on `GitHub`_ -OsInterface.php - -.. literalinclude:: OsInterface.php - :language: php - :linenos: - Facade.php .. literalinclude:: Facade.php :language: php :linenos: +OsInterface.php + +.. literalinclude:: OsInterface.php + :language: php + :linenos: + BiosInterface.php .. literalinclude:: BiosInterface.php diff --git a/Structural/Proxy/README.rst b/Structural/Proxy/README.rst index f9aa24e..b60baea 100644 --- a/Structural/Proxy/README.rst +++ b/Structural/Proxy/README.rst @@ -25,18 +25,18 @@ Code You can also find these code on `GitHub`_ -RecordProxy.php - -.. literalinclude:: RecordProxy.php - :language: php - :linenos: - Record.php .. literalinclude:: Record.php :language: php :linenos: +RecordProxy.php + +.. literalinclude:: RecordProxy.php + :language: php + :linenos: + Test ---- diff --git a/conf.py b/conf.py index 6df45f4..87f2d27 100644 --- a/conf.py +++ b/conf.py @@ -47,8 +47,8 @@ master_doc = 'README' # General information about the project. project = u'DesignPatternsPHP' -copyright = u'2015, Dominik Liebler' -author = u'Dominik Liebler with contributors' +copyright = u'2015, Dominik Liebler and contributors' +author = u'Dominik Liebler and contributors' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the @@ -223,7 +223,7 @@ latex_elements = { # author, documentclass [howto, manual, or own class]). latex_documents = [ (master_doc, 'DesignPatternsPHP.tex', u'DesignPatternsPHP Documentation', - u'Dominik Liebler with contributors', 'manual'), + u'Dominik Liebler and contributors', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of From 65cc90e9740dd028363fd4b007895f284c088f07 Mon Sep 17 00:00:00 2001 From: Faust Date: Wed, 8 Apr 2015 23:19:24 +0200 Subject: [PATCH 022/127] sort php files Behavioral and More --- Behavioral/ChainOfResponsibilities/README.rst | 16 ++++----- Behavioral/Command/README.rst | 12 +++---- Behavioral/Iterator/README.rst | 12 +++---- Behavioral/Memento/README.rst | 12 +++---- Behavioral/NullObject/README.rst | 24 ++++++------- Behavioral/Observer/README.rst | 12 +++---- Behavioral/Specification/README.rst | 20 +++++------ Behavioral/State/README.rst | 8 ++--- Behavioral/Strategy/README.rst | 24 ++++++------- Behavioral/TemplateMethod/README.rst | 12 +++---- Behavioral/Visitor/README.rst | 20 +++++------ More/Repository/README.rst | 16 ++++----- More/ServiceLocator/README.rst | 36 +++++++++---------- 13 files changed, 112 insertions(+), 112 deletions(-) diff --git a/Behavioral/ChainOfResponsibilities/README.rst b/Behavioral/ChainOfResponsibilities/README.rst index 582faec..06a828c 100644 --- a/Behavioral/ChainOfResponsibilities/README.rst +++ b/Behavioral/ChainOfResponsibilities/README.rst @@ -33,21 +33,15 @@ Code You can also find these code on `GitHub`_ -Handler.php - -.. literalinclude:: Handler.php - :language: php - :linenos: - Request.php .. literalinclude:: Request.php :language: php :linenos: -Responsible/FastStorage.php +Handler.php -.. literalinclude:: Responsible/FastStorage.php +.. literalinclude:: Handler.php :language: php :linenos: @@ -57,6 +51,12 @@ Responsible/SlowStorage.php :language: php :linenos: +Responsible/FastStorage.php + +.. literalinclude:: Responsible/FastStorage.php + :language: php + :linenos: + Test ---- diff --git a/Behavioral/Command/README.rst b/Behavioral/Command/README.rst index fc93d8e..2bcf1d4 100644 --- a/Behavioral/Command/README.rst +++ b/Behavioral/Command/README.rst @@ -40,6 +40,12 @@ Code You can also find these code on `GitHub`_ +CommandInterface.php + +.. literalinclude:: CommandInterface.php + :language: php + :linenos: + HelloCommand.php .. literalinclude:: HelloCommand.php @@ -52,12 +58,6 @@ Receiver.php :language: php :linenos: -CommandInterface.php - -.. literalinclude:: CommandInterface.php - :language: php - :linenos: - Invoker.php .. literalinclude:: Invoker.php diff --git a/Behavioral/Iterator/README.rst b/Behavioral/Iterator/README.rst index cb5195a..dbe1199 100644 --- a/Behavioral/Iterator/README.rst +++ b/Behavioral/Iterator/README.rst @@ -33,15 +33,15 @@ Code You can also find these code on `GitHub`_ -BookList.php +Book.php -.. literalinclude:: BookList.php +.. literalinclude:: Book.php :language: php :linenos: -BookListReverseIterator.php +BookList.php -.. literalinclude:: BookListReverseIterator.php +.. literalinclude:: BookList.php :language: php :linenos: @@ -51,9 +51,9 @@ BookListIterator.php :language: php :linenos: -Book.php +BookListReverseIterator.php -.. literalinclude:: Book.php +.. literalinclude:: BookListReverseIterator.php :language: php :linenos: diff --git a/Behavioral/Memento/README.rst b/Behavioral/Memento/README.rst index 50b8046..a9b86c7 100644 --- a/Behavioral/Memento/README.rst +++ b/Behavioral/Memento/README.rst @@ -37,12 +37,6 @@ Code You can also find these code on `GitHub`_ -Caretaker.php - -.. literalinclude:: Caretaker.php - :language: php - :linenos: - Memento.php .. literalinclude:: Memento.php @@ -55,6 +49,12 @@ Originator.php :language: php :linenos: +Caretaker.php + +.. literalinclude:: Caretaker.php + :language: php + :linenos: + Test ---- diff --git a/Behavioral/NullObject/README.rst b/Behavioral/NullObject/README.rst index c969326..187b621 100644 --- a/Behavioral/NullObject/README.rst +++ b/Behavioral/NullObject/README.rst @@ -38,18 +38,6 @@ Code You can also find these code on `GitHub`_ -PrintLogger.php - -.. literalinclude:: PrintLogger.php - :language: php - :linenos: - -NullLogger.php - -.. literalinclude:: NullLogger.php - :language: php - :linenos: - Service.php .. literalinclude:: Service.php @@ -62,6 +50,18 @@ LoggerInterface.php :language: php :linenos: +PrintLogger.php + +.. literalinclude:: PrintLogger.php + :language: php + :linenos: + +NullLogger.php + +.. literalinclude:: NullLogger.php + :language: php + :linenos: + Test ---- diff --git a/Behavioral/Observer/README.rst b/Behavioral/Observer/README.rst index 00dd00d..9a6a230 100644 --- a/Behavioral/Observer/README.rst +++ b/Behavioral/Observer/README.rst @@ -33,18 +33,18 @@ Code You can also find these code on `GitHub`_ -UserObserver.php - -.. literalinclude:: UserObserver.php - :language: php - :linenos: - User.php .. literalinclude:: User.php :language: php :linenos: +UserObserver.php + +.. literalinclude:: UserObserver.php + :language: php + :linenos: + Test ---- diff --git a/Behavioral/Specification/README.rst b/Behavioral/Specification/README.rst index 2aac692..8e3106b 100644 --- a/Behavioral/Specification/README.rst +++ b/Behavioral/Specification/README.rst @@ -21,15 +21,9 @@ Code You can also find these code on `GitHub`_ -Either.php +Item.php -.. literalinclude:: Either.php - :language: php - :linenos: - -PriceSpecification.php - -.. literalinclude:: PriceSpecification.php +.. literalinclude:: Item.php :language: php :linenos: @@ -45,9 +39,15 @@ AbstractSpecification.php :language: php :linenos: -Item.php +Either.php -.. literalinclude:: Item.php +.. literalinclude:: Either.php + :language: php + :linenos: + +PriceSpecification.php + +.. literalinclude:: PriceSpecification.php :language: php :linenos: diff --git a/Behavioral/State/README.rst b/Behavioral/State/README.rst index ff7185e..f5a2b19 100644 --- a/Behavioral/State/README.rst +++ b/Behavioral/State/README.rst @@ -20,9 +20,9 @@ Code You can also find these code on `GitHub`_ -OrderInterface.php +OrderController.php -.. literalinclude:: OrderInterface.php +.. literalinclude:: OrderController.php :language: php :linenos: @@ -32,9 +32,9 @@ OrderFactory.php :language: php :linenos: -OrderController.php +OrderInterface.php -.. literalinclude:: OrderController.php +.. literalinclude:: OrderInterface.php :language: php :linenos: diff --git a/Behavioral/Strategy/README.rst b/Behavioral/Strategy/README.rst index 3853771..940c716 100644 --- a/Behavioral/Strategy/README.rst +++ b/Behavioral/Strategy/README.rst @@ -34,18 +34,6 @@ Code You can also find these code on `GitHub`_ -DateComparator.php - -.. literalinclude:: DateComparator.php - :language: php - :linenos: - -IdComparator.php - -.. literalinclude:: IdComparator.php - :language: php - :linenos: - ObjectCollection.php .. literalinclude:: ObjectCollection.php @@ -58,6 +46,18 @@ ComparatorInterface.php :language: php :linenos: +DateComparator.php + +.. literalinclude:: DateComparator.php + :language: php + :linenos: + +IdComparator.php + +.. literalinclude:: IdComparator.php + :language: php + :linenos: + Test ---- diff --git a/Behavioral/TemplateMethod/README.rst b/Behavioral/TemplateMethod/README.rst index 0239c0f..0397753 100644 --- a/Behavioral/TemplateMethod/README.rst +++ b/Behavioral/TemplateMethod/README.rst @@ -33,12 +33,6 @@ Code You can also find these code on `GitHub`_ -CityJourney.php - -.. literalinclude:: CityJourney.php - :language: php - :linenos: - Journey.php .. literalinclude:: Journey.php @@ -51,6 +45,12 @@ BeachJourney.php :language: php :linenos: +CityJourney.php + +.. literalinclude:: CityJourney.php + :language: php + :linenos: + Test ---- diff --git a/Behavioral/Visitor/README.rst b/Behavioral/Visitor/README.rst index 4fca151..3d88f0d 100644 --- a/Behavioral/Visitor/README.rst +++ b/Behavioral/Visitor/README.rst @@ -25,15 +25,9 @@ Code You can also find these code on `GitHub`_ -Group.php +RoleVisitorInterface.php -.. literalinclude:: Group.php - :language: php - :linenos: - -Role.php - -.. literalinclude:: Role.php +.. literalinclude:: RoleVisitorInterface.php :language: php :linenos: @@ -43,15 +37,21 @@ RolePrintVisitor.php :language: php :linenos: +Role.php + +.. literalinclude:: Role.php + :language: php + :linenos: + User.php .. literalinclude:: User.php :language: php :linenos: -RoleVisitorInterface.php +Group.php -.. literalinclude:: RoleVisitorInterface.php +.. literalinclude:: Group.php :language: php :linenos: diff --git a/More/Repository/README.rst b/More/Repository/README.rst index 504be8b..48ac018 100644 --- a/More/Repository/README.rst +++ b/More/Repository/README.rst @@ -31,21 +31,15 @@ Code You can also find these code on `GitHub`_ -PostRepository.php - -.. literalinclude:: PostRepository.php - :language: php - :linenos: - Post.php .. literalinclude:: Post.php :language: php :linenos: -MemoryStorage.php +PostRepository.php -.. literalinclude:: MemoryStorage.php +.. literalinclude:: PostRepository.php :language: php :linenos: @@ -55,6 +49,12 @@ Storage.php :language: php :linenos: +MemoryStorage.php + +.. literalinclude:: MemoryStorage.php + :language: php + :linenos: + Test ---- diff --git a/More/ServiceLocator/README.rst b/More/ServiceLocator/README.rst index f7e69a2..1ffa792 100644 --- a/More/ServiceLocator/README.rst +++ b/More/ServiceLocator/README.rst @@ -35,24 +35,6 @@ Code You can also find these code on `GitHub`_ -LogService.php - -.. literalinclude:: LogService.php - :language: php - :linenos: - -LogServiceInterface.php - -.. literalinclude:: LogServiceInterface.php - :language: php - :linenos: - -DatabaseServiceInterface.php - -.. literalinclude:: DatabaseServiceInterface.php - :language: php - :linenos: - ServiceLocatorInterface.php .. literalinclude:: ServiceLocatorInterface.php @@ -65,6 +47,24 @@ ServiceLocator.php :language: php :linenos: +LogServiceInterface.php + +.. literalinclude:: LogServiceInterface.php + :language: php + :linenos: + +LogService.php + +.. literalinclude:: LogService.php + :language: php + :linenos: + +DatabaseServiceInterface.php + +.. literalinclude:: DatabaseServiceInterface.php + :language: php + :linenos: + DatabaseService.php .. literalinclude:: DatabaseService.php From 4c5f2ca113a485abb35f4857dc56ba8c01f66dc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Huet?= Date: Sat, 25 Apr 2015 20:31:32 +0200 Subject: [PATCH 023/127] Adding RulerZ as a sample RulerZ is a PHP implementation of the Specification pattern which puts the emphasis on three main aspects: - an easy and data-agnostic DSL to define business rules and specifications, - the ability to check if a candidate satisfies a specification, - the ability to filter or query any datasource to only retrieve candidates matching a specification. --- Behavioral/Specification/README.rst | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Behavioral/Specification/README.rst b/Behavioral/Specification/README.rst index 8e3106b..ad9512c 100644 --- a/Behavioral/Specification/README.rst +++ b/Behavioral/Specification/README.rst @@ -9,6 +9,11 @@ checked against. The composite specification class has one method called ``isSatisfiedBy`` that returns either true or false depending on whether the given object satisfies the specification. +Sample: +^^^^^^^ + +- `RulerZ `__ + UML Diagram ----------- @@ -73,4 +78,4 @@ Tests/SpecificationTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Specification -.. _`Specification`: http://en.wikipedia.org/wiki/Specification_pattern \ No newline at end of file +.. _`Specification`: http://en.wikipedia.org/wiki/Specification_pattern From 23d84837388e20f1defa9708dea5135a8ae65317 Mon Sep 17 00:00:00 2001 From: SHANG Guokan Date: Wed, 29 Apr 2015 13:41:02 +0200 Subject: [PATCH 024/127] Update README.rst --- Behavioral/Specification/README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Behavioral/Specification/README.rst b/Behavioral/Specification/README.rst index ad9512c..e12c24a 100644 --- a/Behavioral/Specification/README.rst +++ b/Behavioral/Specification/README.rst @@ -9,8 +9,8 @@ checked against. The composite specification class has one method called ``isSatisfiedBy`` that returns either true or false depending on whether the given object satisfies the specification. -Sample: -^^^^^^^ +Examples +-------- - `RulerZ `__ From db7dab5b0d13a85d5d4b1f9735934aee88865568 Mon Sep 17 00:00:00 2001 From: Bocharsky Victor Date: Wed, 27 May 2015 21:37:19 +0300 Subject: [PATCH 025/127] Replace array storage with SplObjectStorage If you already use SPL interfaces in your example, maybe better to use `SplObjectStorage` too instead of `array` to store observers with `attach` and `detach` convenient methods? What do you think? --- Behavioral/Observer/User.php | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/Behavioral/Observer/User.php b/Behavioral/Observer/User.php index 013f194..a441038 100644 --- a/Behavioral/Observer/User.php +++ b/Behavioral/Observer/User.php @@ -20,9 +20,14 @@ class User implements \SplSubject /** * observers * - * @var array + * @var \SplObjectStorage */ - protected $observers = array(); + protected $observers; + + function __construct() + { + $this->observers = new \SplObjectStorage(); + } /** * attach a new observer @@ -33,7 +38,7 @@ class User implements \SplSubject */ public function attach(\SplObserver $observer) { - $this->observers[] = $observer; + $this->observers->attach($observer); } /** @@ -45,11 +50,7 @@ class User implements \SplSubject */ public function detach(\SplObserver $observer) { - $index = array_search($observer, $this->observers); - - if (false !== $index) { - unset($this->observers[$index]); - } + $this->observers->detach($observer); } /** From 48551e04fa8b2e53ecce245f06e2bed634dd4bd3 Mon Sep 17 00:00:00 2001 From: Faust Date: Thu, 28 May 2015 19:00:45 +0200 Subject: [PATCH 026/127] add Brazilian Portuguese, Spanish, Catalan translation initial files --- conf.py | 4 + .../ChainOfResponsibilities/README.po | 90 ++++++++++++++ .../LC_MESSAGES/Behavioral/Command/README.po | 99 ++++++++++++++++ .../LC_MESSAGES/Behavioral/Iterator/README.po | 83 +++++++++++++ .../LC_MESSAGES/Behavioral/Mediator/README.po | 78 +++++++++++++ .../LC_MESSAGES/Behavioral/Memento/README.po | 85 ++++++++++++++ .../Behavioral/NullObject/README.po | 103 ++++++++++++++++ .../LC_MESSAGES/Behavioral/Observer/README.po | 75 ++++++++++++ locale/ca/LC_MESSAGES/Behavioral/README.po | 24 ++++ .../Behavioral/Specification/README.po | 84 +++++++++++++ .../ca/LC_MESSAGES/Behavioral/State/README.po | 63 ++++++++++ .../LC_MESSAGES/Behavioral/Strategy/README.po | 92 +++++++++++++++ .../Behavioral/TemplateMethod/README.po | 83 +++++++++++++ .../LC_MESSAGES/Behavioral/Visitor/README.po | 75 ++++++++++++ .../Creational/AbstractFactory/README.po | 88 ++++++++++++++ .../LC_MESSAGES/Creational/Builder/README.po | 110 ++++++++++++++++++ .../Creational/FactoryMethod/README.po | 90 ++++++++++++++ .../LC_MESSAGES/Creational/Multiton/README.po | 64 ++++++++++ .../ca/LC_MESSAGES/Creational/Pool/README.po | 81 +++++++++++++ .../Creational/Prototype/README.po | 68 +++++++++++ locale/ca/LC_MESSAGES/Creational/README.po | 25 ++++ .../Creational/SimpleFactory/README.po | 72 ++++++++++++ .../Creational/Singleton/README.po | 75 ++++++++++++ .../Creational/StaticFactory/README.po | 75 ++++++++++++ .../ca/LC_MESSAGES/More/Delegation/README.po | 60 ++++++++++ locale/ca/LC_MESSAGES/More/README.po | 16 +++ .../ca/LC_MESSAGES/More/Repository/README.po | 76 ++++++++++++ .../LC_MESSAGES/More/ServiceLocator/README.po | 94 +++++++++++++++ locale/ca/LC_MESSAGES/README.po | 93 +++++++++++++++ .../LC_MESSAGES/Structural/Adapter/README.po | 82 +++++++++++++ .../LC_MESSAGES/Structural/Bridge/README.po | 78 +++++++++++++ .../Structural/Composite/README.po | 78 +++++++++++++ .../Structural/DataMapper/README.po | 77 ++++++++++++ .../Structural/Decorator/README.po | 78 +++++++++++++ .../Structural/DependencyInjection/README.po | 107 +++++++++++++++++ .../LC_MESSAGES/Structural/Facade/README.po | 87 ++++++++++++++ .../Structural/FluentInterface/README.po | 66 +++++++++++ .../ca/LC_MESSAGES/Structural/Proxy/README.po | 59 ++++++++++ locale/ca/LC_MESSAGES/Structural/README.po | 23 ++++ .../LC_MESSAGES/Structural/Registry/README.po | 67 +++++++++++ .../ChainOfResponsibilities/README.po | 90 ++++++++++++++ .../LC_MESSAGES/Behavioral/Command/README.po | 99 ++++++++++++++++ .../LC_MESSAGES/Behavioral/Iterator/README.po | 83 +++++++++++++ .../LC_MESSAGES/Behavioral/Mediator/README.po | 78 +++++++++++++ .../LC_MESSAGES/Behavioral/Memento/README.po | 85 ++++++++++++++ .../Behavioral/NullObject/README.po | 103 ++++++++++++++++ .../LC_MESSAGES/Behavioral/Observer/README.po | 75 ++++++++++++ locale/es/LC_MESSAGES/Behavioral/README.po | 24 ++++ .../Behavioral/Specification/README.po | 84 +++++++++++++ .../es/LC_MESSAGES/Behavioral/State/README.po | 63 ++++++++++ .../LC_MESSAGES/Behavioral/Strategy/README.po | 92 +++++++++++++++ .../Behavioral/TemplateMethod/README.po | 83 +++++++++++++ .../LC_MESSAGES/Behavioral/Visitor/README.po | 75 ++++++++++++ .../Creational/AbstractFactory/README.po | 88 ++++++++++++++ .../LC_MESSAGES/Creational/Builder/README.po | 110 ++++++++++++++++++ .../Creational/FactoryMethod/README.po | 90 ++++++++++++++ .../LC_MESSAGES/Creational/Multiton/README.po | 64 ++++++++++ .../es/LC_MESSAGES/Creational/Pool/README.po | 81 +++++++++++++ .../Creational/Prototype/README.po | 68 +++++++++++ locale/es/LC_MESSAGES/Creational/README.po | 25 ++++ .../Creational/SimpleFactory/README.po | 72 ++++++++++++ .../Creational/Singleton/README.po | 75 ++++++++++++ .../Creational/StaticFactory/README.po | 75 ++++++++++++ .../es/LC_MESSAGES/More/Delegation/README.po | 60 ++++++++++ locale/es/LC_MESSAGES/More/README.po | 16 +++ .../es/LC_MESSAGES/More/Repository/README.po | 76 ++++++++++++ .../LC_MESSAGES/More/ServiceLocator/README.po | 94 +++++++++++++++ locale/es/LC_MESSAGES/README.po | 93 +++++++++++++++ .../LC_MESSAGES/Structural/Adapter/README.po | 82 +++++++++++++ .../LC_MESSAGES/Structural/Bridge/README.po | 78 +++++++++++++ .../Structural/Composite/README.po | 78 +++++++++++++ .../Structural/DataMapper/README.po | 77 ++++++++++++ .../Structural/Decorator/README.po | 78 +++++++++++++ .../Structural/DependencyInjection/README.po | 107 +++++++++++++++++ .../LC_MESSAGES/Structural/Facade/README.po | 87 ++++++++++++++ .../Structural/FluentInterface/README.po | 66 +++++++++++ .../es/LC_MESSAGES/Structural/Proxy/README.po | 59 ++++++++++ locale/es/LC_MESSAGES/Structural/README.po | 23 ++++ .../LC_MESSAGES/Structural/Registry/README.po | 67 +++++++++++ .../ChainOfResponsibilities/README.po | 90 ++++++++++++++ .../LC_MESSAGES/Behavioral/Command/README.po | 99 ++++++++++++++++ .../LC_MESSAGES/Behavioral/Iterator/README.po | 83 +++++++++++++ .../LC_MESSAGES/Behavioral/Mediator/README.po | 78 +++++++++++++ .../LC_MESSAGES/Behavioral/Memento/README.po | 85 ++++++++++++++ .../Behavioral/NullObject/README.po | 103 ++++++++++++++++ .../LC_MESSAGES/Behavioral/Observer/README.po | 75 ++++++++++++ locale/pt_BR/LC_MESSAGES/Behavioral/README.po | 24 ++++ .../Behavioral/Specification/README.po | 84 +++++++++++++ .../LC_MESSAGES/Behavioral/State/README.po | 63 ++++++++++ .../LC_MESSAGES/Behavioral/Strategy/README.po | 92 +++++++++++++++ .../Behavioral/TemplateMethod/README.po | 83 +++++++++++++ .../LC_MESSAGES/Behavioral/Visitor/README.po | 75 ++++++++++++ .../Creational/AbstractFactory/README.po | 88 ++++++++++++++ .../LC_MESSAGES/Creational/Builder/README.po | 110 ++++++++++++++++++ .../Creational/FactoryMethod/README.po | 90 ++++++++++++++ .../LC_MESSAGES/Creational/Multiton/README.po | 64 ++++++++++ .../LC_MESSAGES/Creational/Pool/README.po | 81 +++++++++++++ .../Creational/Prototype/README.po | 68 +++++++++++ locale/pt_BR/LC_MESSAGES/Creational/README.po | 25 ++++ .../Creational/SimpleFactory/README.po | 72 ++++++++++++ .../Creational/Singleton/README.po | 75 ++++++++++++ .../Creational/StaticFactory/README.po | 75 ++++++++++++ .../LC_MESSAGES/More/Delegation/README.po | 60 ++++++++++ locale/pt_BR/LC_MESSAGES/More/README.po | 16 +++ .../LC_MESSAGES/More/Repository/README.po | 76 ++++++++++++ .../LC_MESSAGES/More/ServiceLocator/README.po | 94 +++++++++++++++ locale/pt_BR/LC_MESSAGES/README.po | 93 +++++++++++++++ .../LC_MESSAGES/Structural/Adapter/README.po | 82 +++++++++++++ .../LC_MESSAGES/Structural/Bridge/README.po | 78 +++++++++++++ .../Structural/Composite/README.po | 78 +++++++++++++ .../Structural/DataMapper/README.po | 77 ++++++++++++ .../Structural/Decorator/README.po | 78 +++++++++++++ .../Structural/DependencyInjection/README.po | 107 +++++++++++++++++ .../LC_MESSAGES/Structural/Facade/README.po | 87 ++++++++++++++ .../Structural/FluentInterface/README.po | 66 +++++++++++ .../LC_MESSAGES/Structural/Proxy/README.po | 59 ++++++++++ locale/pt_BR/LC_MESSAGES/Structural/README.po | 23 ++++ .../LC_MESSAGES/Structural/Registry/README.po | 67 +++++++++++ 118 files changed, 8773 insertions(+) create mode 100644 locale/ca/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po create mode 100644 locale/ca/LC_MESSAGES/Behavioral/Command/README.po create mode 100644 locale/ca/LC_MESSAGES/Behavioral/Iterator/README.po create mode 100644 locale/ca/LC_MESSAGES/Behavioral/Mediator/README.po create mode 100644 locale/ca/LC_MESSAGES/Behavioral/Memento/README.po create mode 100644 locale/ca/LC_MESSAGES/Behavioral/NullObject/README.po create mode 100644 locale/ca/LC_MESSAGES/Behavioral/Observer/README.po create mode 100644 locale/ca/LC_MESSAGES/Behavioral/README.po create mode 100644 locale/ca/LC_MESSAGES/Behavioral/Specification/README.po create mode 100644 locale/ca/LC_MESSAGES/Behavioral/State/README.po create mode 100644 locale/ca/LC_MESSAGES/Behavioral/Strategy/README.po create mode 100644 locale/ca/LC_MESSAGES/Behavioral/TemplateMethod/README.po create mode 100644 locale/ca/LC_MESSAGES/Behavioral/Visitor/README.po create mode 100644 locale/ca/LC_MESSAGES/Creational/AbstractFactory/README.po create mode 100644 locale/ca/LC_MESSAGES/Creational/Builder/README.po create mode 100644 locale/ca/LC_MESSAGES/Creational/FactoryMethod/README.po create mode 100644 locale/ca/LC_MESSAGES/Creational/Multiton/README.po create mode 100644 locale/ca/LC_MESSAGES/Creational/Pool/README.po create mode 100644 locale/ca/LC_MESSAGES/Creational/Prototype/README.po create mode 100644 locale/ca/LC_MESSAGES/Creational/README.po create mode 100644 locale/ca/LC_MESSAGES/Creational/SimpleFactory/README.po create mode 100644 locale/ca/LC_MESSAGES/Creational/Singleton/README.po create mode 100644 locale/ca/LC_MESSAGES/Creational/StaticFactory/README.po create mode 100644 locale/ca/LC_MESSAGES/More/Delegation/README.po create mode 100644 locale/ca/LC_MESSAGES/More/README.po create mode 100644 locale/ca/LC_MESSAGES/More/Repository/README.po create mode 100644 locale/ca/LC_MESSAGES/More/ServiceLocator/README.po create mode 100644 locale/ca/LC_MESSAGES/README.po create mode 100644 locale/ca/LC_MESSAGES/Structural/Adapter/README.po create mode 100644 locale/ca/LC_MESSAGES/Structural/Bridge/README.po create mode 100644 locale/ca/LC_MESSAGES/Structural/Composite/README.po create mode 100644 locale/ca/LC_MESSAGES/Structural/DataMapper/README.po create mode 100644 locale/ca/LC_MESSAGES/Structural/Decorator/README.po create mode 100644 locale/ca/LC_MESSAGES/Structural/DependencyInjection/README.po create mode 100644 locale/ca/LC_MESSAGES/Structural/Facade/README.po create mode 100644 locale/ca/LC_MESSAGES/Structural/FluentInterface/README.po create mode 100644 locale/ca/LC_MESSAGES/Structural/Proxy/README.po create mode 100644 locale/ca/LC_MESSAGES/Structural/README.po create mode 100644 locale/ca/LC_MESSAGES/Structural/Registry/README.po create mode 100644 locale/es/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po create mode 100644 locale/es/LC_MESSAGES/Behavioral/Command/README.po create mode 100644 locale/es/LC_MESSAGES/Behavioral/Iterator/README.po create mode 100644 locale/es/LC_MESSAGES/Behavioral/Mediator/README.po create mode 100644 locale/es/LC_MESSAGES/Behavioral/Memento/README.po create mode 100644 locale/es/LC_MESSAGES/Behavioral/NullObject/README.po create mode 100644 locale/es/LC_MESSAGES/Behavioral/Observer/README.po create mode 100644 locale/es/LC_MESSAGES/Behavioral/README.po create mode 100644 locale/es/LC_MESSAGES/Behavioral/Specification/README.po create mode 100644 locale/es/LC_MESSAGES/Behavioral/State/README.po create mode 100644 locale/es/LC_MESSAGES/Behavioral/Strategy/README.po create mode 100644 locale/es/LC_MESSAGES/Behavioral/TemplateMethod/README.po create mode 100644 locale/es/LC_MESSAGES/Behavioral/Visitor/README.po create mode 100644 locale/es/LC_MESSAGES/Creational/AbstractFactory/README.po create mode 100644 locale/es/LC_MESSAGES/Creational/Builder/README.po create mode 100644 locale/es/LC_MESSAGES/Creational/FactoryMethod/README.po create mode 100644 locale/es/LC_MESSAGES/Creational/Multiton/README.po create mode 100644 locale/es/LC_MESSAGES/Creational/Pool/README.po create mode 100644 locale/es/LC_MESSAGES/Creational/Prototype/README.po create mode 100644 locale/es/LC_MESSAGES/Creational/README.po create mode 100644 locale/es/LC_MESSAGES/Creational/SimpleFactory/README.po create mode 100644 locale/es/LC_MESSAGES/Creational/Singleton/README.po create mode 100644 locale/es/LC_MESSAGES/Creational/StaticFactory/README.po create mode 100644 locale/es/LC_MESSAGES/More/Delegation/README.po create mode 100644 locale/es/LC_MESSAGES/More/README.po create mode 100644 locale/es/LC_MESSAGES/More/Repository/README.po create mode 100644 locale/es/LC_MESSAGES/More/ServiceLocator/README.po create mode 100644 locale/es/LC_MESSAGES/README.po create mode 100644 locale/es/LC_MESSAGES/Structural/Adapter/README.po create mode 100644 locale/es/LC_MESSAGES/Structural/Bridge/README.po create mode 100644 locale/es/LC_MESSAGES/Structural/Composite/README.po create mode 100644 locale/es/LC_MESSAGES/Structural/DataMapper/README.po create mode 100644 locale/es/LC_MESSAGES/Structural/Decorator/README.po create mode 100644 locale/es/LC_MESSAGES/Structural/DependencyInjection/README.po create mode 100644 locale/es/LC_MESSAGES/Structural/Facade/README.po create mode 100644 locale/es/LC_MESSAGES/Structural/FluentInterface/README.po create mode 100644 locale/es/LC_MESSAGES/Structural/Proxy/README.po create mode 100644 locale/es/LC_MESSAGES/Structural/README.po create mode 100644 locale/es/LC_MESSAGES/Structural/Registry/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Behavioral/Command/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Behavioral/Iterator/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Behavioral/Mediator/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Behavioral/Memento/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Behavioral/NullObject/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Behavioral/Observer/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Behavioral/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Behavioral/Specification/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Behavioral/State/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Behavioral/Strategy/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Behavioral/TemplateMethod/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Behavioral/Visitor/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Creational/AbstractFactory/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Creational/Builder/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Creational/FactoryMethod/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Creational/Multiton/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Creational/Pool/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Creational/Prototype/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Creational/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Creational/SimpleFactory/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Creational/Singleton/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Creational/StaticFactory/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/More/Delegation/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/More/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/More/Repository/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/More/ServiceLocator/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Structural/Adapter/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Structural/Bridge/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Structural/Composite/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Structural/DataMapper/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Structural/Decorator/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Structural/DependencyInjection/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Structural/Facade/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Structural/FluentInterface/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Structural/Proxy/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Structural/README.po create mode 100644 locale/pt_BR/LC_MESSAGES/Structural/Registry/README.po diff --git a/conf.py b/conf.py index 87f2d27..10ce0b0 100644 --- a/conf.py +++ b/conf.py @@ -282,3 +282,7 @@ texinfo_documents = [ # If true, do not generate a @detailmenu in the "Top" node's menu. #texinfo_no_detailmenu = False + +# -- Options for Translation ------------------------------------------- +locale_dirs = ['locale/'] +gettext_compact = False diff --git a/locale/ca/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po b/locale/ca/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po new file mode 100644 index 0000000..5441787 --- /dev/null +++ b/locale/ca/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po @@ -0,0 +1,90 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:2 +msgid "`Chain Of Responsibilities`_" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:5 +msgid "Purpose:" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:7 +msgid "" +"To build a chain of objects to handle a call in sequential order. If one " +"object cannot handle a call, it delegates the call to the next in the chain " +"and so forth." +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:12 +msgid "Examples:" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:14 +msgid "" +"logging framework, where each chain element decides autonomously what to do " +"with a log message" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:16 +msgid "a Spam filter" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:17 +msgid "" +"Caching: first object is an instance of e.g. a Memcached Interface, if that " +"\"misses\" it delegates the call to the database interface" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:19 +msgid "" +"Yii Framework: CFilterChain is a chain of controller action filters. the " +"executing point is passed from one filter to the next along the chain, and " +"only if all filters say \"yes\", the action can be invoked at last." +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:25 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:32 +msgid "Code" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:34 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:36 +msgid "Request.php" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:42 +msgid "Handler.php" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:48 +msgid "Responsible/SlowStorage.php" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:54 +msgid "Responsible/FastStorage.php" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:61 +msgid "Test" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:63 +msgid "Tests/ChainTest.php" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Behavioral/Command/README.po b/locale/ca/LC_MESSAGES/Behavioral/Command/README.po new file mode 100644 index 0000000..34ee70f --- /dev/null +++ b/locale/ca/LC_MESSAGES/Behavioral/Command/README.po @@ -0,0 +1,99 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Command/README.rst:2 +msgid "`Command`_" +msgstr "" + +#: ../../Behavioral/Command/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Command/README.rst:7 +msgid "To encapsulate invocation and decoupling." +msgstr "" + +#: ../../Behavioral/Command/README.rst:9 +msgid "" +"We have an Invoker and a Receiver. This pattern uses a \"Command\" to " +"delegate the method call against the Receiver and presents the same method " +"\"execute\". Therefore, the Invoker just knows to call \"execute\" to " +"process the Command of the client. The Receiver is decoupled from the " +"Invoker." +msgstr "" + +#: ../../Behavioral/Command/README.rst:15 +msgid "" +"The second aspect of this pattern is the undo(), which undoes the method " +"execute(). Command can also be aggregated to combine more complex commands " +"with minimum copy-paste and relying on composition over inheritance." +msgstr "" + +#: ../../Behavioral/Command/README.rst:21 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Command/README.rst:23 +msgid "" +"A text editor : all events are Command which can be undone, stacked and " +"saved." +msgstr "" + +#: ../../Behavioral/Command/README.rst:25 +msgid "" +"Symfony2: SF2 Commands that can be run from the CLI are built with just the " +"Command pattern in mind" +msgstr "" + +#: ../../Behavioral/Command/README.rst:27 +msgid "" +"big CLI tools use subcommands to distribute various tasks and pack them in " +"\"modules\", each of these can be implemented with the Command pattern (e.g." +" vagrant)" +msgstr "" + +#: ../../Behavioral/Command/README.rst:32 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Command/README.rst:39 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Command/README.rst:41 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Command/README.rst:43 +msgid "CommandInterface.php" +msgstr "" + +#: ../../Behavioral/Command/README.rst:49 +msgid "HelloCommand.php" +msgstr "" + +#: ../../Behavioral/Command/README.rst:55 +msgid "Receiver.php" +msgstr "" + +#: ../../Behavioral/Command/README.rst:61 +msgid "Invoker.php" +msgstr "" + +#: ../../Behavioral/Command/README.rst:68 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Command/README.rst:70 +msgid "Tests/CommandTest.php" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Behavioral/Iterator/README.po b/locale/ca/LC_MESSAGES/Behavioral/Iterator/README.po new file mode 100644 index 0000000..2a298e9 --- /dev/null +++ b/locale/ca/LC_MESSAGES/Behavioral/Iterator/README.po @@ -0,0 +1,83 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Iterator/README.rst:2 +msgid "`Iterator`_" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:7 +msgid "" +"To make an object iterable and to make it appear like a collection of " +"objects." +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:11 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:13 +msgid "" +"to process a file line by line by just running over all lines (which have an" +" object representation) for a file (which of course is an object, too)" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:18 +msgid "Note" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:20 +msgid "" +"Standard PHP Library (SPL) defines an interface Iterator which is best " +"suited for this! Often you would want to implement the Countable interface " +"too, to allow ``count($object)`` on your iterable object" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:25 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:32 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:34 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:36 +msgid "Book.php" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:42 +msgid "BookList.php" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:48 +msgid "BookListIterator.php" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:54 +msgid "BookListReverseIterator.php" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:61 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:63 +msgid "Tests/IteratorTest.php" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Behavioral/Mediator/README.po b/locale/ca/LC_MESSAGES/Behavioral/Mediator/README.po new file mode 100644 index 0000000..f2e9514 --- /dev/null +++ b/locale/ca/LC_MESSAGES/Behavioral/Mediator/README.po @@ -0,0 +1,78 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Mediator/README.rst:2 +msgid "`Mediator`_" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:7 +msgid "" +"This pattern provides an easy to decouple many components working together. " +"It is a good alternative over Observer IF you have a \"central " +"intelligence\", like a controller (but not in the sense of the MVC)." +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:11 +msgid "" +"All components (called Colleague) are only coupled to the MediatorInterface " +"and it is a good thing because in OOP, one good friend is better than many. " +"This is the key-feature of this pattern." +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:16 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:23 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:25 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:27 +msgid "MediatorInterface.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:33 +msgid "Mediator.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:39 +msgid "Colleague.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:45 +msgid "Subsystem/Client.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:51 +msgid "Subsystem/Database.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:57 +msgid "Subsystem/Server.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:64 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:66 +msgid "Tests/MediatorTest.php" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Behavioral/Memento/README.po b/locale/ca/LC_MESSAGES/Behavioral/Memento/README.po new file mode 100644 index 0000000..9ac83df --- /dev/null +++ b/locale/ca/LC_MESSAGES/Behavioral/Memento/README.po @@ -0,0 +1,85 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Memento/README.rst:2 +msgid "`Memento`_" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:7 +msgid "" +"Provide the ability to restore an object to its previous state (undo via " +"rollback)." +msgstr "" + +#: ../../Behavioral/Memento/README.rst:10 +msgid "" +"The memento pattern is implemented with three objects: the originator, a " +"caretaker and a memento. The originator is some object that has an internal " +"state. The caretaker is going to do something to the originator, but wants " +"to be able to undo the change. The caretaker first asks the originator for a" +" memento object. Then it does whatever operation (or sequence of operations)" +" it was going to do. To roll back to the state before the operations, it " +"returns the memento object to the originator. The memento object itself is " +"an opaque object (one which the caretaker cannot, or should not, change). " +"When using this pattern, care should be taken if the originator may change " +"other objects or resources - the memento pattern operates on a single " +"object." +msgstr "" + +#: ../../Behavioral/Memento/README.rst:23 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:25 +msgid "The seed of a pseudorandom number generator" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:26 +msgid "The state in a finite state machine" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:29 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:36 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:38 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:40 +msgid "Memento.php" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:46 +msgid "Originator.php" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:52 +msgid "Caretaker.php" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:59 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:61 +msgid "Tests/MementoTest.php" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Behavioral/NullObject/README.po b/locale/ca/LC_MESSAGES/Behavioral/NullObject/README.po new file mode 100644 index 0000000..28e1eea --- /dev/null +++ b/locale/ca/LC_MESSAGES/Behavioral/NullObject/README.po @@ -0,0 +1,103 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/NullObject/README.rst:2 +msgid "`Null Object`_" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:7 +msgid "" +"NullObject is not a GoF design pattern but a schema which appears frequently" +" enough to be considered a pattern. It has the following benefits:" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:11 +msgid "Client code is simplified" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:12 +msgid "Reduces the chance of null pointer exceptions" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:13 +msgid "Fewer conditionals require less test cases" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:15 +msgid "" +"Methods that return an object or null should instead return an object or " +"``NullObject``. ``NullObject``\\ s simplify boilerplate code such as ``if " +"(!is_null($obj)) { $obj->callSomething(); }`` to just " +"``$obj->callSomething();`` by eliminating the conditional check in client " +"code." +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:22 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:24 +msgid "Symfony2: null logger of profiler" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:25 +msgid "Symfony2: null output in Symfony/Console" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:26 +msgid "null handler in a Chain of Responsibilities pattern" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:27 +msgid "null command in a Command pattern" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:30 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:37 +msgid "Code" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:39 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:41 +msgid "Service.php" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:47 +msgid "LoggerInterface.php" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:53 +msgid "PrintLogger.php" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:59 +msgid "NullLogger.php" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:66 +msgid "Test" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:68 +msgid "Tests/LoggerTest.php" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Behavioral/Observer/README.po b/locale/ca/LC_MESSAGES/Behavioral/Observer/README.po new file mode 100644 index 0000000..84dd8a9 --- /dev/null +++ b/locale/ca/LC_MESSAGES/Behavioral/Observer/README.po @@ -0,0 +1,75 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Observer/README.rst:2 +msgid "`Observer`_" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:7 +msgid "" +"To implement a publish/subscribe behaviour to an object, whenever a " +"\"Subject\" object changes it's state, the attached \"Observers\" will be " +"notified. It is used to shorten the amount of coupled objects and uses loose" +" coupling instead." +msgstr "" + +#: ../../Behavioral/Observer/README.rst:13 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:15 +msgid "" +"a message queue system is observed to show the progress of a job in a GUI" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:19 +msgid "Note" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:21 +msgid "" +"PHP already defines two interfaces that can help to implement this pattern: " +"SplObserver and SplSubject." +msgstr "" + +#: ../../Behavioral/Observer/README.rst:25 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:32 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:34 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:36 +msgid "User.php" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:42 +msgid "UserObserver.php" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:49 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:51 +msgid "Tests/ObserverTest.php" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Behavioral/README.po b/locale/ca/LC_MESSAGES/Behavioral/README.po new file mode 100644 index 0000000..d773162 --- /dev/null +++ b/locale/ca/LC_MESSAGES/Behavioral/README.po @@ -0,0 +1,24 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/README.rst:2 +msgid "Behavioral" +msgstr "" + +#: ../../Behavioral/README.rst:4 +msgid "" +"In software engineering, behavioral design patterns are design patterns that" +" identify common communication patterns between objects and realize these " +"patterns. By doing so, these patterns increase flexibility in carrying out " +"this communication." +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Behavioral/Specification/README.po b/locale/ca/LC_MESSAGES/Behavioral/Specification/README.po new file mode 100644 index 0000000..79bcea6 --- /dev/null +++ b/locale/ca/LC_MESSAGES/Behavioral/Specification/README.po @@ -0,0 +1,84 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Specification/README.rst:2 +msgid "`Specification`_" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:7 +msgid "" +"Builds a clear specification of business rules, where objects can be checked" +" against. The composite specification class has one method called " +"``isSatisfiedBy`` that returns either true or false depending on whether the" +" given object satisfies the specification." +msgstr "" + +#: ../../Behavioral/Specification/README.rst:13 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:15 +msgid "`RulerZ `__" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:18 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:25 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:27 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:29 +msgid "Item.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:35 +msgid "SpecificationInterface.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:41 +msgid "AbstractSpecification.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:47 +msgid "Either.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:53 +msgid "PriceSpecification.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:59 +msgid "Plus.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:65 +msgid "Not.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:72 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:74 +msgid "Tests/SpecificationTest.php" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Behavioral/State/README.po b/locale/ca/LC_MESSAGES/Behavioral/State/README.po new file mode 100644 index 0000000..a6ed567 --- /dev/null +++ b/locale/ca/LC_MESSAGES/Behavioral/State/README.po @@ -0,0 +1,63 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/State/README.rst:2 +msgid "`State`_" +msgstr "" + +#: ../../Behavioral/State/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/State/README.rst:7 +msgid "" +"Encapsulate varying behavior for the same routine based on an object's " +"state. This can be a cleaner way for an object to change its behavior at " +"runtime without resorting to large monolithic conditional statements." +msgstr "" + +#: ../../Behavioral/State/README.rst:12 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/State/README.rst:19 +msgid "Code" +msgstr "" + +#: ../../Behavioral/State/README.rst:21 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/State/README.rst:23 +msgid "OrderController.php" +msgstr "" + +#: ../../Behavioral/State/README.rst:29 +msgid "OrderFactory.php" +msgstr "" + +#: ../../Behavioral/State/README.rst:35 +msgid "OrderInterface.php" +msgstr "" + +#: ../../Behavioral/State/README.rst:41 +msgid "ShippingOrder.php" +msgstr "" + +#: ../../Behavioral/State/README.rst:47 +msgid "CreateOrder.php" +msgstr "" + +#: ../../Behavioral/State/README.rst:54 +msgid "Test" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Behavioral/Strategy/README.po b/locale/ca/LC_MESSAGES/Behavioral/Strategy/README.po new file mode 100644 index 0000000..83278ed --- /dev/null +++ b/locale/ca/LC_MESSAGES/Behavioral/Strategy/README.po @@ -0,0 +1,92 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Strategy/README.rst:2 +msgid "`Strategy`_" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:5 +msgid "Terminology:" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:7 +msgid "Context" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:8 +msgid "Strategy" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:9 +msgid "Concrete Strategy" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:12 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:14 +msgid "" +"To separate strategies and to enable fast switching between them. Also this " +"pattern is a good alternative to inheritance (instead of having an abstract " +"class that is extended)." +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:19 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:21 +msgid "sorting a list of objects, one strategy by date, the other by id" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:22 +msgid "" +"simplify unit testing: e.g. switching between file and in-memory storage" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:26 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:33 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:35 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:37 +msgid "ObjectCollection.php" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:43 +msgid "ComparatorInterface.php" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:49 +msgid "DateComparator.php" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:55 +msgid "IdComparator.php" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:62 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:64 +msgid "Tests/StrategyTest.php" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Behavioral/TemplateMethod/README.po b/locale/ca/LC_MESSAGES/Behavioral/TemplateMethod/README.po new file mode 100644 index 0000000..4fea331 --- /dev/null +++ b/locale/ca/LC_MESSAGES/Behavioral/TemplateMethod/README.po @@ -0,0 +1,83 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/TemplateMethod/README.rst:2 +msgid "`Template Method`_" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:7 +msgid "Template Method is a behavioral design pattern." +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:9 +msgid "" +"Perhaps you have encountered it many times already. The idea is to let " +"subclasses of this abstract template \"finish\" the behavior of an " +"algorithm." +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:13 +msgid "" +"A.k.a the \"Hollywood principle\": \"Don't call us, we call you.\" This " +"class is not called by subclasses but the inverse. How? With abstraction of " +"course." +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:17 +msgid "" +"In other words, this is a skeleton of algorithm, well-suited for framework " +"libraries. The user has just to implement one method and the superclass do " +"the job." +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:21 +msgid "" +"It is an easy way to decouple concrete classes and reduce copy-paste, that's" +" why you'll find it everywhere." +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:25 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:32 +msgid "Code" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:34 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:36 +msgid "Journey.php" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:42 +msgid "BeachJourney.php" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:48 +msgid "CityJourney.php" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:55 +msgid "Test" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:57 +msgid "Tests/JourneyTest.php" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Behavioral/Visitor/README.po b/locale/ca/LC_MESSAGES/Behavioral/Visitor/README.po new file mode 100644 index 0000000..1664fe3 --- /dev/null +++ b/locale/ca/LC_MESSAGES/Behavioral/Visitor/README.po @@ -0,0 +1,75 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Visitor/README.rst:2 +msgid "`Visitor`_" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:7 +msgid "" +"The Visitor Pattern lets you outsource operations on objects to other " +"objects. The main reason to do this is to keep a separation of concerns. But" +" classes have to define a contract to allow visitors (the ``Role::accept`` " +"method in the example)." +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:12 +msgid "" +"The contract is an abstract class but you can have also a clean interface. " +"In that case, each Visitor has to choose itself which method to invoke on " +"the visitor." +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:17 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:24 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:26 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:28 +msgid "RoleVisitorInterface.php" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:34 +msgid "RolePrintVisitor.php" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:40 +msgid "Role.php" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:46 +msgid "User.php" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:52 +msgid "Group.php" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:59 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:61 +msgid "Tests/VisitorTest.php" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Creational/AbstractFactory/README.po b/locale/ca/LC_MESSAGES/Creational/AbstractFactory/README.po new file mode 100644 index 0000000..6213f0e --- /dev/null +++ b/locale/ca/LC_MESSAGES/Creational/AbstractFactory/README.po @@ -0,0 +1,88 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/AbstractFactory/README.rst:2 +msgid "`Abstract Factory`_" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:7 +msgid "" +"To create series of related or dependent objects without specifying their " +"concrete classes. Usually the created classes all implement the same " +"interface. The client of the abstract factory does not care about how these " +"objects are created, he just knows how they go together." +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:13 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:20 +msgid "Code" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:22 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:24 +msgid "AbstractFactory.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:30 +msgid "JsonFactory.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:36 +msgid "HtmlFactory.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:42 +msgid "MediaInterface.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:48 +msgid "Picture.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:54 +msgid "Text.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:60 +msgid "Json/Picture.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:66 +msgid "Json/Text.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:72 +msgid "Html/Picture.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:78 +msgid "Html/Text.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:85 +msgid "Test" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:87 +msgid "Tests/AbstractFactoryTest.php" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Creational/Builder/README.po b/locale/ca/LC_MESSAGES/Creational/Builder/README.po new file mode 100644 index 0000000..dfb357a --- /dev/null +++ b/locale/ca/LC_MESSAGES/Creational/Builder/README.po @@ -0,0 +1,110 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/Builder/README.rst:2 +msgid "`Builder`_" +msgstr "" + +#: ../../Creational/Builder/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/Builder/README.rst:7 +msgid "Builder is an interface that build parts of a complex object." +msgstr "" + +#: ../../Creational/Builder/README.rst:9 +msgid "" +"Sometimes, if the builder has a better knowledge of what it builds, this " +"interface could be an abstract class with default methods (aka adapter)." +msgstr "" + +#: ../../Creational/Builder/README.rst:12 +msgid "" +"If you have a complex inheritance tree for objects, it is logical to have a " +"complex inheritance tree for builders too." +msgstr "" + +#: ../../Creational/Builder/README.rst:15 +msgid "" +"Note: Builders have often a fluent interface, see the mock builder of " +"PHPUnit for example." +msgstr "" + +#: ../../Creational/Builder/README.rst:19 +msgid "Examples" +msgstr "" + +#: ../../Creational/Builder/README.rst:21 +msgid "PHPUnit: Mock Builder" +msgstr "" + +#: ../../Creational/Builder/README.rst:24 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/Builder/README.rst:31 +msgid "Code" +msgstr "" + +#: ../../Creational/Builder/README.rst:33 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/Builder/README.rst:35 +msgid "Director.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:41 +msgid "BuilderInterface.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:47 +msgid "BikeBuilder.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:53 +msgid "CarBuilder.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:59 +msgid "Parts/Vehicle.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:65 +msgid "Parts/Bike.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:71 +msgid "Parts/Car.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:77 +msgid "Parts/Engine.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:83 +msgid "Parts/Wheel.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:89 +msgid "Parts/Door.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:96 +msgid "Test" +msgstr "" + +#: ../../Creational/Builder/README.rst:98 +msgid "Tests/DirectorTest.php" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Creational/FactoryMethod/README.po b/locale/ca/LC_MESSAGES/Creational/FactoryMethod/README.po new file mode 100644 index 0000000..29fd708 --- /dev/null +++ b/locale/ca/LC_MESSAGES/Creational/FactoryMethod/README.po @@ -0,0 +1,90 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/FactoryMethod/README.rst:2 +msgid "`Factory Method`_" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:7 +msgid "" +"The good point over the SimpleFactory is you can subclass it to implement " +"different ways to create objects" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:10 +msgid "For simple case, this abstract class could be just an interface" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:12 +msgid "" +"This pattern is a \"real\" Design Pattern because it achieves the " +"\"Dependency Inversion Principle\" a.k.a the \"D\" in S.O.L.I.D principles." +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:15 +msgid "" +"It means the FactoryMethod class depends on abstractions, not concrete " +"classes. This is the real trick compared to SimpleFactory or StaticFactory." +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:31 +msgid "FactoryMethod.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:37 +msgid "ItalianFactory.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:43 +msgid "GermanFactory.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:49 +msgid "VehicleInterface.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:55 +msgid "Porsche.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:61 +msgid "Bicycle.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:67 +msgid "Ferrari.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:74 +msgid "Test" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:76 +msgid "Tests/FactoryMethodTest.php" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Creational/Multiton/README.po b/locale/ca/LC_MESSAGES/Creational/Multiton/README.po new file mode 100644 index 0000000..0990e3c --- /dev/null +++ b/locale/ca/LC_MESSAGES/Creational/Multiton/README.po @@ -0,0 +1,64 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/Multiton/README.rst:2 +msgid "Multiton" +msgstr "" + +#: ../../Creational/Multiton/README.rst:4 +msgid "" +"**THIS IS CONSIDERED TO BE AN ANTI-PATTERN! FOR BETTER TESTABILITY AND " +"MAINTAINABILITY USE DEPENDENCY INJECTION!**" +msgstr "" + +#: ../../Creational/Multiton/README.rst:8 +msgid "Purpose" +msgstr "" + +#: ../../Creational/Multiton/README.rst:10 +msgid "" +"To have only a list of named instances that are used, like a singleton but " +"with n instances." +msgstr "" + +#: ../../Creational/Multiton/README.rst:14 +msgid "Examples" +msgstr "" + +#: ../../Creational/Multiton/README.rst:16 +msgid "2 DB Connectors, e.g. one for MySQL, the other for SQLite" +msgstr "" + +#: ../../Creational/Multiton/README.rst:17 +msgid "multiple Loggers (one for debug messages, one for errors)" +msgstr "" + +#: ../../Creational/Multiton/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/Multiton/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Creational/Multiton/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/Multiton/README.rst:31 +msgid "Multiton.php" +msgstr "" + +#: ../../Creational/Multiton/README.rst:38 +msgid "Test" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Creational/Pool/README.po b/locale/ca/LC_MESSAGES/Creational/Pool/README.po new file mode 100644 index 0000000..6d829be --- /dev/null +++ b/locale/ca/LC_MESSAGES/Creational/Pool/README.po @@ -0,0 +1,81 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/Pool/README.rst:2 +msgid "`Pool`_" +msgstr "" + +#: ../../Creational/Pool/README.rst:4 +msgid "" +"The **object pool pattern** is a software creational design pattern that " +"uses a set of initialized objects kept ready to use – a \"pool\" – rather " +"than allocating and destroying them on demand. A client of the pool will " +"request an object from the pool and perform operations on the returned " +"object. When the client has finished, it returns the object, which is a " +"specific type of factory object, to the pool rather than destroying it." +msgstr "" + +#: ../../Creational/Pool/README.rst:11 +msgid "" +"Object pooling can offer a significant performance boost in situations where" +" the cost of initializing a class instance is high, the rate of " +"instantiation of a class is high, and the number of instances in use at any " +"one time is low. The pooled object is obtained in predictable time when " +"creation of the new objects (especially over network) may take variable " +"time." +msgstr "" + +#: ../../Creational/Pool/README.rst:18 +msgid "" +"However these benefits are mostly true for objects that are expensive with " +"respect to time, such as database connections, socket connections, threads " +"and large graphic objects like fonts or bitmaps. In certain situations, " +"simple object pooling (that hold no external resources, but only occupy " +"memory) may not be efficient and could decrease performance." +msgstr "" + +#: ../../Creational/Pool/README.rst:25 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/Pool/README.rst:32 +msgid "Code" +msgstr "" + +#: ../../Creational/Pool/README.rst:34 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/Pool/README.rst:36 +msgid "Pool.php" +msgstr "" + +#: ../../Creational/Pool/README.rst:42 +msgid "Processor.php" +msgstr "" + +#: ../../Creational/Pool/README.rst:48 +msgid "Worker.php" +msgstr "" + +#: ../../Creational/Pool/README.rst:55 +msgid "Test" +msgstr "" + +#: ../../Creational/Pool/README.rst:57 +msgid "Tests/PoolTest.php" +msgstr "" + +#: ../../Creational/Pool/README.rst:63 +msgid "Tests/TestWorker.php" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Creational/Prototype/README.po b/locale/ca/LC_MESSAGES/Creational/Prototype/README.po new file mode 100644 index 0000000..6cdc786 --- /dev/null +++ b/locale/ca/LC_MESSAGES/Creational/Prototype/README.po @@ -0,0 +1,68 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/Prototype/README.rst:2 +msgid "`Prototype`_" +msgstr "" + +#: ../../Creational/Prototype/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/Prototype/README.rst:7 +msgid "" +"To avoid the cost of creating objects the standard way (new Foo()) and " +"instead create a prototype and clone it." +msgstr "" + +#: ../../Creational/Prototype/README.rst:11 +msgid "Examples" +msgstr "" + +#: ../../Creational/Prototype/README.rst:13 +msgid "" +"Large amounts of data (e.g. create 1,000,000 rows in a database at once via " +"a ORM)." +msgstr "" + +#: ../../Creational/Prototype/README.rst:17 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/Prototype/README.rst:24 +msgid "Code" +msgstr "" + +#: ../../Creational/Prototype/README.rst:26 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/Prototype/README.rst:28 +msgid "index.php" +msgstr "" + +#: ../../Creational/Prototype/README.rst:34 +msgid "BookPrototype.php" +msgstr "" + +#: ../../Creational/Prototype/README.rst:40 +msgid "BarBookPrototype.php" +msgstr "" + +#: ../../Creational/Prototype/README.rst:46 +msgid "FooBookPrototype.php" +msgstr "" + +#: ../../Creational/Prototype/README.rst:53 +msgid "Test" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Creational/README.po b/locale/ca/LC_MESSAGES/Creational/README.po new file mode 100644 index 0000000..4d9d72d --- /dev/null +++ b/locale/ca/LC_MESSAGES/Creational/README.po @@ -0,0 +1,25 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/README.rst:2 +msgid "Creational" +msgstr "" + +#: ../../Creational/README.rst:4 +msgid "" +"In software engineering, creational design patterns are design patterns that" +" deal with object creation mechanisms, trying to create objects in a manner " +"suitable to the situation. The basic form of object creation could result in" +" design problems or added complexity to the design. Creational design " +"patterns solve this problem by somehow controlling this object creation." +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Creational/SimpleFactory/README.po b/locale/ca/LC_MESSAGES/Creational/SimpleFactory/README.po new file mode 100644 index 0000000..a36955e --- /dev/null +++ b/locale/ca/LC_MESSAGES/Creational/SimpleFactory/README.po @@ -0,0 +1,72 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/SimpleFactory/README.rst:2 +msgid "Simple Factory" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:7 +msgid "ConcreteFactory is a simple factory pattern." +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:9 +msgid "" +"It differs from the static factory because it is NOT static and as you know:" +" static => global => evil!" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:12 +msgid "" +"Therefore, you can have multiple factories, differently parametrized, you " +"can subclass it and you can mock-up it." +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:16 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:23 +msgid "Code" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:25 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:27 +msgid "ConcreteFactory.php" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:33 +msgid "VehicleInterface.php" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:39 +msgid "Bicycle.php" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:45 +msgid "Scooter.php" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:52 +msgid "Test" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:54 +msgid "Tests/SimpleFactoryTest.php" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Creational/Singleton/README.po b/locale/ca/LC_MESSAGES/Creational/Singleton/README.po new file mode 100644 index 0000000..4911734 --- /dev/null +++ b/locale/ca/LC_MESSAGES/Creational/Singleton/README.po @@ -0,0 +1,75 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/Singleton/README.rst:2 +msgid "`Singleton`_" +msgstr "" + +#: ../../Creational/Singleton/README.rst:4 +msgid "" +"**THIS IS CONSIDERED TO BE AN ANTI-PATTERN! FOR BETTER TESTABILITY AND " +"MAINTAINABILITY USE DEPENDENCY INJECTION!**" +msgstr "" + +#: ../../Creational/Singleton/README.rst:8 +msgid "Purpose" +msgstr "" + +#: ../../Creational/Singleton/README.rst:10 +msgid "" +"To have only one instance of this object in the application that will handle" +" all calls." +msgstr "" + +#: ../../Creational/Singleton/README.rst:14 +msgid "Examples" +msgstr "" + +#: ../../Creational/Singleton/README.rst:16 +msgid "DB Connector" +msgstr "" + +#: ../../Creational/Singleton/README.rst:17 +msgid "" +"Logger (may also be a Multiton if there are many log files for several " +"purposes)" +msgstr "" + +#: ../../Creational/Singleton/README.rst:19 +msgid "" +"Lock file for the application (there is only one in the filesystem ...)" +msgstr "" + +#: ../../Creational/Singleton/README.rst:23 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/Singleton/README.rst:30 +msgid "Code" +msgstr "" + +#: ../../Creational/Singleton/README.rst:32 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/Singleton/README.rst:34 +msgid "Singleton.php" +msgstr "" + +#: ../../Creational/Singleton/README.rst:41 +msgid "Test" +msgstr "" + +#: ../../Creational/Singleton/README.rst:43 +msgid "Tests/SingletonTest.php" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Creational/StaticFactory/README.po b/locale/ca/LC_MESSAGES/Creational/StaticFactory/README.po new file mode 100644 index 0000000..3e84e15 --- /dev/null +++ b/locale/ca/LC_MESSAGES/Creational/StaticFactory/README.po @@ -0,0 +1,75 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/StaticFactory/README.rst:2 +msgid "Static Factory" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:7 +msgid "" +"Similar to the AbstractFactory, this pattern is used to create series of " +"related or dependent objects. The difference between this and the abstract " +"factory pattern is that the static factory pattern uses just one static " +"method to create all types of objects it can create. It is usually named " +"``factory`` or ``build``." +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:14 +msgid "Examples" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:16 +msgid "" +"Zend Framework: ``Zend_Cache_Backend`` or ``_Frontend`` use a factory method" +" create cache backends or frontends" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:31 +msgid "StaticFactory.php" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:37 +msgid "FormatterInterface.php" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:43 +msgid "FormatString.php" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:49 +msgid "FormatNumber.php" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:56 +msgid "Test" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:58 +msgid "Tests/StaticFactoryTest.php" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/More/Delegation/README.po b/locale/ca/LC_MESSAGES/More/Delegation/README.po new file mode 100644 index 0000000..ff40269 --- /dev/null +++ b/locale/ca/LC_MESSAGES/More/Delegation/README.po @@ -0,0 +1,60 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../More/Delegation/README.rst:2 +msgid "`Delegation`_" +msgstr "" + +#: ../../More/Delegation/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../More/Delegation/README.rst:7 ../../More/Delegation/README.rst:12 +msgid "..." +msgstr "" + +#: ../../More/Delegation/README.rst:10 +msgid "Examples" +msgstr "" + +#: ../../More/Delegation/README.rst:15 +msgid "UML Diagram" +msgstr "" + +#: ../../More/Delegation/README.rst:22 +msgid "Code" +msgstr "" + +#: ../../More/Delegation/README.rst:24 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../More/Delegation/README.rst:26 +msgid "Usage.php" +msgstr "" + +#: ../../More/Delegation/README.rst:32 +msgid "TeamLead.php" +msgstr "" + +#: ../../More/Delegation/README.rst:38 +msgid "JuniorDeveloper.php" +msgstr "" + +#: ../../More/Delegation/README.rst:45 +msgid "Test" +msgstr "" + +#: ../../More/Delegation/README.rst:47 +msgid "Tests/DelegationTest.php" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/More/README.po b/locale/ca/LC_MESSAGES/More/README.po new file mode 100644 index 0000000..c4c30fe --- /dev/null +++ b/locale/ca/LC_MESSAGES/More/README.po @@ -0,0 +1,16 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../More/README.rst:2 +msgid "More" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/More/Repository/README.po b/locale/ca/LC_MESSAGES/More/Repository/README.po new file mode 100644 index 0000000..4849f4f --- /dev/null +++ b/locale/ca/LC_MESSAGES/More/Repository/README.po @@ -0,0 +1,76 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../More/Repository/README.rst:2 +msgid "Repository" +msgstr "" + +#: ../../More/Repository/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../More/Repository/README.rst:7 +msgid "" +"Mediates between the domain and data mapping layers using a collection-like " +"interface for accessing domain objects. Repository encapsulates the set of " +"objects persisted in a data store and the operations performed over them, " +"providing a more object-oriented view of the persistence layer. Repository " +"also supports the objective of achieving a clean separation and one-way " +"dependency between the domain and data mapping layers." +msgstr "" + +#: ../../More/Repository/README.rst:16 +msgid "Examples" +msgstr "" + +#: ../../More/Repository/README.rst:18 +msgid "" +"Doctrine 2 ORM: there is Repository that mediates between Entity and DBAL " +"and contains methods to retrieve objects" +msgstr "" + +#: ../../More/Repository/README.rst:20 +msgid "Laravel Framework" +msgstr "" + +#: ../../More/Repository/README.rst:23 +msgid "UML Diagram" +msgstr "" + +#: ../../More/Repository/README.rst:30 +msgid "Code" +msgstr "" + +#: ../../More/Repository/README.rst:32 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../More/Repository/README.rst:34 +msgid "Post.php" +msgstr "" + +#: ../../More/Repository/README.rst:40 +msgid "PostRepository.php" +msgstr "" + +#: ../../More/Repository/README.rst:46 +msgid "Storage.php" +msgstr "" + +#: ../../More/Repository/README.rst:52 +msgid "MemoryStorage.php" +msgstr "" + +#: ../../More/Repository/README.rst:59 +msgid "Test" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/More/ServiceLocator/README.po b/locale/ca/LC_MESSAGES/More/ServiceLocator/README.po new file mode 100644 index 0000000..8f3537e --- /dev/null +++ b/locale/ca/LC_MESSAGES/More/ServiceLocator/README.po @@ -0,0 +1,94 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../More/ServiceLocator/README.rst:2 +msgid "`Service Locator`_" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:7 +msgid "" +"To implement a loosely coupled architecture in order to get better testable," +" maintainable and extendable code. DI pattern and Service Locator pattern " +"are an implementation of the Inverse of Control pattern." +msgstr "" + +#: ../../More/ServiceLocator/README.rst:12 +msgid "Usage" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:14 +msgid "" +"With ``ServiceLocator`` you can register a service for a given interface. By" +" using the interface you can retrieve the service and use it in the classes " +"of the application without knowing its implementation. You can configure and" +" inject the Service Locator object on bootstrap." +msgstr "" + +#: ../../More/ServiceLocator/README.rst:20 +msgid "Examples" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:22 +msgid "" +"Zend Framework 2 uses Service Locator to create and share services used in " +"the framework(i.e. EventManager, ModuleManager, all custom user services " +"provided by modules, etc...)" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:27 +msgid "UML Diagram" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:34 +msgid "Code" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:36 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:38 +msgid "ServiceLocatorInterface.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:44 +msgid "ServiceLocator.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:50 +msgid "LogServiceInterface.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:56 +msgid "LogService.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:62 +msgid "DatabaseServiceInterface.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:68 +msgid "DatabaseService.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:75 +msgid "Test" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:77 +msgid "Tests/ServiceLocatorTest.php" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/README.po b/locale/ca/LC_MESSAGES/README.po new file mode 100644 index 0000000..84e21de --- /dev/null +++ b/locale/ca/LC_MESSAGES/README.po @@ -0,0 +1,93 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../README.rst:5 +msgid "DesignPatternsPHP" +msgstr "" + +#: ../../README.rst:11 +msgid "" +"This is a collection of known `design patterns`_ and some sample code how to" +" implement them in PHP. Every pattern has a small list of examples (most of " +"them from Zend Framework, Symfony2 or Doctrine2 as I'm most familiar with " +"this software)." +msgstr "" + +#: ../../README.rst:16 +msgid "" +"I think the problem with patterns is that often people do know them but " +"don't know when to apply which." +msgstr "" + +#: ../../README.rst:20 +msgid "Patterns" +msgstr "" + +#: ../../README.rst:22 +msgid "" +"The patterns can be structured in roughly three different categories. Please" +" click on **the title of every pattern's page** for a full explanation of " +"the pattern on Wikipedia." +msgstr "" + +#: ../../README.rst:35 +msgid "Contribute" +msgstr "" + +#: ../../README.rst:37 +msgid "" +"Please feel free to fork and extend existing or add your own examples and " +"send a pull request with your changes! To establish a consistent code " +"quality, please check your code using `PHP CodeSniffer`_ against `PSR2 " +"standard`_ using ``./vendor/bin/phpcs -p --standard=PSR2 --ignore=vendor " +".``." +msgstr "" + +#: ../../README.rst:44 +msgid "License" +msgstr "" + +#: ../../README.rst:46 +msgid "(The MIT License)" +msgstr "" + +#: ../../README.rst:48 +msgid "Copyright (c) 2014 `Dominik Liebler`_ and `contributors`_" +msgstr "" + +#: ../../README.rst:50 +msgid "" +"Permission is hereby granted, free of charge, to any person obtaining a copy" +" of this software and associated documentation files (the 'Software'), to " +"deal in the Software without restriction, including without limitation the " +"rights to use, copy, modify, merge, publish, distribute, sublicense, and/or " +"sell copies of the Software, and to permit persons to whom the Software is " +"furnished to do so, subject to the following conditions:" +msgstr "" + +#: ../../README.rst:58 +msgid "" +"The above copyright notice and this permission notice shall be included in " +"all copies or substantial portions of the Software." +msgstr "" + +#: ../../README.rst:61 +msgid "" +"THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR " +"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, " +"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE " +"AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER " +"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING " +"FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS" +" IN THE SOFTWARE." +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Structural/Adapter/README.po b/locale/ca/LC_MESSAGES/Structural/Adapter/README.po new file mode 100644 index 0000000..420b400 --- /dev/null +++ b/locale/ca/LC_MESSAGES/Structural/Adapter/README.po @@ -0,0 +1,82 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Adapter/README.rst:2 +msgid "`Adapter / Wrapper`_" +msgstr "" + +#: ../../Structural/Adapter/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Adapter/README.rst:7 +msgid "" +"To translate one interface for a class into a compatible interface. An " +"adapter allows classes to work together that normally could not because of " +"incompatible interfaces by providing it's interface to clients while using " +"the original interface." +msgstr "" + +#: ../../Structural/Adapter/README.rst:13 +msgid "Examples" +msgstr "" + +#: ../../Structural/Adapter/README.rst:15 +msgid "DB Client libraries adapter" +msgstr "" + +#: ../../Structural/Adapter/README.rst:16 +msgid "" +"using multiple different webservices and adapters normalize data so that the" +" outcome is the same for all" +msgstr "" + +#: ../../Structural/Adapter/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Adapter/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Structural/Adapter/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Adapter/README.rst:31 +msgid "PaperBookInterface.php" +msgstr "" + +#: ../../Structural/Adapter/README.rst:37 +msgid "Book.php" +msgstr "" + +#: ../../Structural/Adapter/README.rst:43 +msgid "EBookAdapter.php" +msgstr "" + +#: ../../Structural/Adapter/README.rst:49 +msgid "EBookInterface.php" +msgstr "" + +#: ../../Structural/Adapter/README.rst:55 +msgid "Kindle.php" +msgstr "" + +#: ../../Structural/Adapter/README.rst:62 +msgid "Test" +msgstr "" + +#: ../../Structural/Adapter/README.rst:64 +msgid "Tests/AdapterTest.php" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Structural/Bridge/README.po b/locale/ca/LC_MESSAGES/Structural/Bridge/README.po new file mode 100644 index 0000000..6e9ae00 --- /dev/null +++ b/locale/ca/LC_MESSAGES/Structural/Bridge/README.po @@ -0,0 +1,78 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Bridge/README.rst:2 +msgid "`Bridge`_" +msgstr "" + +#: ../../Structural/Bridge/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Bridge/README.rst:7 +msgid "" +"Decouple an abstraction from its implementation so that the two can vary " +"independently. (http://en.wikipedia.org/wiki/Bridge\\_pattern)" +msgstr "" + +#: ../../Structural/Bridge/README.rst:11 +msgid "Sample:" +msgstr "" + +#: ../../Structural/Bridge/README.rst:13 +msgid "`Symfony DoctrineBridge `__" +msgstr "" + +#: ../../Structural/Bridge/README.rst:17 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Bridge/README.rst:24 +msgid "Code" +msgstr "" + +#: ../../Structural/Bridge/README.rst:26 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Bridge/README.rst:28 +msgid "Workshop.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:34 +msgid "Assemble.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:40 +msgid "Produce.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:46 +msgid "Vehicle.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:52 +msgid "Motorcycle.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:58 +msgid "Car.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:65 +msgid "Test" +msgstr "" + +#: ../../Structural/Bridge/README.rst:67 +msgid "Tests/BridgeTest.php" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Structural/Composite/README.po b/locale/ca/LC_MESSAGES/Structural/Composite/README.po new file mode 100644 index 0000000..ce6ce1a --- /dev/null +++ b/locale/ca/LC_MESSAGES/Structural/Composite/README.po @@ -0,0 +1,78 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Composite/README.rst:2 +msgid "`Composite`_" +msgstr "" + +#: ../../Structural/Composite/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Composite/README.rst:7 +msgid "" +"To treat a group of objects the same way as a single instance of the object." +msgstr "" + +#: ../../Structural/Composite/README.rst:11 +msgid "Examples" +msgstr "" + +#: ../../Structural/Composite/README.rst:13 +msgid "" +"a form class instance handles all its form elements like a single instance " +"of the form, when ``render()`` is called, it subsequently runs through all " +"its child elements and calls ``render()`` on them" +msgstr "" + +#: ../../Structural/Composite/README.rst:16 +msgid "" +"``Zend_Config``: a tree of configuration options, each one is a " +"``Zend_Config`` object itself" +msgstr "" + +#: ../../Structural/Composite/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Composite/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Structural/Composite/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Composite/README.rst:31 +msgid "FormElement.php" +msgstr "" + +#: ../../Structural/Composite/README.rst:37 +msgid "Form.php" +msgstr "" + +#: ../../Structural/Composite/README.rst:43 +msgid "InputElement.php" +msgstr "" + +#: ../../Structural/Composite/README.rst:49 +msgid "TextElement.php" +msgstr "" + +#: ../../Structural/Composite/README.rst:56 +msgid "Test" +msgstr "" + +#: ../../Structural/Composite/README.rst:58 +msgid "Tests/CompositeTest.php" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Structural/DataMapper/README.po b/locale/ca/LC_MESSAGES/Structural/DataMapper/README.po new file mode 100644 index 0000000..28b8d4a --- /dev/null +++ b/locale/ca/LC_MESSAGES/Structural/DataMapper/README.po @@ -0,0 +1,77 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/DataMapper/README.rst:2 +msgid "`Data Mapper`_" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:7 +msgid "" +"A Data Mapper, is a Data Access Layer that performs bidirectional transfer " +"of data between a persistent data store (often a relational database) and an" +" in memory data representation (the domain layer). The goal of the pattern " +"is to keep the in memory representation and the persistent data store " +"independent of each other and the data mapper itself. The layer is composed " +"of one or more mappers (or Data Access Objects), performing the data " +"transfer. Mapper implementations vary in scope. Generic mappers will handle " +"many different domain entity types, dedicated mappers will handle one or a " +"few." +msgstr "" + +#: ../../Structural/DataMapper/README.rst:17 +msgid "" +"The key point of this pattern is, unlike Active Record pattern, the data " +"model follows Single Responsibility Principle." +msgstr "" + +#: ../../Structural/DataMapper/README.rst:21 +msgid "Examples" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:23 +msgid "" +"DB Object Relational Mapper (ORM) : Doctrine2 uses DAO named as " +"\"EntityRepository\"" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:27 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:34 +msgid "Code" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:36 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:38 +msgid "User.php" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:44 +msgid "UserMapper.php" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:51 +msgid "Test" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:53 +msgid "Tests/DataMapperTest.php" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Structural/Decorator/README.po b/locale/ca/LC_MESSAGES/Structural/Decorator/README.po new file mode 100644 index 0000000..b752b90 --- /dev/null +++ b/locale/ca/LC_MESSAGES/Structural/Decorator/README.po @@ -0,0 +1,78 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Decorator/README.rst:2 +msgid "`Decorator`_" +msgstr "" + +#: ../../Structural/Decorator/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Decorator/README.rst:7 +msgid "To dynamically add new functionality to class instances." +msgstr "" + +#: ../../Structural/Decorator/README.rst:10 +msgid "Examples" +msgstr "" + +#: ../../Structural/Decorator/README.rst:12 +msgid "Zend Framework: decorators for ``Zend_Form_Element`` instances" +msgstr "" + +#: ../../Structural/Decorator/README.rst:13 +msgid "" +"Web Service Layer: Decorators JSON and XML for a REST service (in this case," +" only one of these should be allowed of course)" +msgstr "" + +#: ../../Structural/Decorator/README.rst:17 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Decorator/README.rst:24 +msgid "Code" +msgstr "" + +#: ../../Structural/Decorator/README.rst:26 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Decorator/README.rst:28 +msgid "RendererInterface.php" +msgstr "" + +#: ../../Structural/Decorator/README.rst:34 +msgid "Webservice.php" +msgstr "" + +#: ../../Structural/Decorator/README.rst:40 +msgid "Decorator.php" +msgstr "" + +#: ../../Structural/Decorator/README.rst:46 +msgid "RenderInXml.php" +msgstr "" + +#: ../../Structural/Decorator/README.rst:52 +msgid "RenderInJson.php" +msgstr "" + +#: ../../Structural/Decorator/README.rst:59 +msgid "Test" +msgstr "" + +#: ../../Structural/Decorator/README.rst:61 +msgid "Tests/DecoratorTest.php" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Structural/DependencyInjection/README.po b/locale/ca/LC_MESSAGES/Structural/DependencyInjection/README.po new file mode 100644 index 0000000..9e6e9fa --- /dev/null +++ b/locale/ca/LC_MESSAGES/Structural/DependencyInjection/README.po @@ -0,0 +1,107 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/DependencyInjection/README.rst:2 +msgid "`Dependency Injection`_" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:7 +msgid "" +"To implement a loosely coupled architecture in order to get better testable," +" maintainable and extendable code." +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:11 +msgid "Usage" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:13 +msgid "" +"Configuration gets injected and ``Connection`` will get all that it needs " +"from ``$config``. Without DI, the configuration would be created directly in" +" ``Connection``, which is not very good for testing and extending " +"``Connection``." +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:18 +msgid "" +"Notice we are following Inversion of control principle in ``Connection`` by " +"asking ``$config`` to implement ``Parameters`` interface. This decouples our" +" components. We don't care where the source of information comes from, we " +"only care that ``$config`` has certain methods to retrieve that information." +" Read more about Inversion of control `here " +"`__." +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:26 +msgid "Examples" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:28 +msgid "" +"The Doctrine2 ORM uses dependency injection e.g. for configuration that is " +"injected into a ``Connection`` object. For testing purposes, one can easily " +"create a mock object of the configuration and inject that into the " +"``Connection`` object" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:32 +msgid "" +"Symfony and Zend Framework 2 already have containers for DI that create " +"objects via a configuration array and inject them where needed (i.e. in " +"Controllers)" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:37 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:44 +msgid "Code" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:46 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:48 +msgid "AbstractConfig.php" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:54 +msgid "Parameters.php" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:60 +msgid "ArrayConfig.php" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:66 +msgid "Connection.php" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:73 +msgid "Test" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:75 +msgid "Tests/DependencyInjectionTest.php" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:81 +msgid "Tests/config.php" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Structural/Facade/README.po b/locale/ca/LC_MESSAGES/Structural/Facade/README.po new file mode 100644 index 0000000..8f8fd9b --- /dev/null +++ b/locale/ca/LC_MESSAGES/Structural/Facade/README.po @@ -0,0 +1,87 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Facade/README.rst:2 +msgid "`Facade`_" +msgstr "" + +#: ../../Structural/Facade/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Facade/README.rst:7 +msgid "" +"The primary goal of a Facade Pattern is not to avoid you to read the manual " +"of a complex API. It's only a side-effect. The first goal is to reduce " +"coupling and follow the Law of Demeter." +msgstr "" + +#: ../../Structural/Facade/README.rst:11 +msgid "" +"A Facade is meant to decouple a client and a sub-system by embedding many " +"(but sometimes just one) interface, and of course to reduce complexity." +msgstr "" + +#: ../../Structural/Facade/README.rst:15 +msgid "A facade does not forbid you the access to the sub-system" +msgstr "" + +#: ../../Structural/Facade/README.rst:16 +msgid "You can (you should) have multiple facades for one sub-system" +msgstr "" + +#: ../../Structural/Facade/README.rst:18 +msgid "" +"That's why a good facade has no ``new`` in it. If there are multiple " +"creations for each method, it is not a Facade, it's a Builder or a " +"[Abstract\\|Static\\|Simple] Factory [Method]." +msgstr "" + +#: ../../Structural/Facade/README.rst:22 +msgid "" +"The best facade has no ``new`` and a constructor with interface-type-hinted " +"parameters. If you need creation of new instances, use a Factory as " +"argument." +msgstr "" + +#: ../../Structural/Facade/README.rst:27 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Facade/README.rst:34 +msgid "Code" +msgstr "" + +#: ../../Structural/Facade/README.rst:36 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Facade/README.rst:38 +msgid "Facade.php" +msgstr "" + +#: ../../Structural/Facade/README.rst:44 +msgid "OsInterface.php" +msgstr "" + +#: ../../Structural/Facade/README.rst:50 +msgid "BiosInterface.php" +msgstr "" + +#: ../../Structural/Facade/README.rst:57 +msgid "Test" +msgstr "" + +#: ../../Structural/Facade/README.rst:59 +msgid "Tests/FacadeTest.php" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Structural/FluentInterface/README.po b/locale/ca/LC_MESSAGES/Structural/FluentInterface/README.po new file mode 100644 index 0000000..a0d1de7 --- /dev/null +++ b/locale/ca/LC_MESSAGES/Structural/FluentInterface/README.po @@ -0,0 +1,66 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/FluentInterface/README.rst:2 +msgid "`Fluent Interface`_" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:7 +msgid "" +"To write code that is easy readable just like sentences in a natural " +"language (like English)." +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:11 +msgid "Examples" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:13 +msgid "Doctrine2's QueryBuilder works something like that example class below" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:15 +msgid "PHPUnit uses fluent interfaces to build mock objects" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:16 +msgid "Yii Framework: CDbCommand and CActiveRecord use this pattern, too" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:19 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:26 +msgid "Code" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:28 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:30 +msgid "Sql.php" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:37 +msgid "Test" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:39 +msgid "Tests/FluentInterfaceTest.php" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Structural/Proxy/README.po b/locale/ca/LC_MESSAGES/Structural/Proxy/README.po new file mode 100644 index 0000000..3272dfd --- /dev/null +++ b/locale/ca/LC_MESSAGES/Structural/Proxy/README.po @@ -0,0 +1,59 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Proxy/README.rst:2 +msgid "`Proxy`_" +msgstr "" + +#: ../../Structural/Proxy/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Proxy/README.rst:7 +msgid "To interface to anything that is expensive or impossible to duplicate." +msgstr "" + +#: ../../Structural/Proxy/README.rst:10 +msgid "Examples" +msgstr "" + +#: ../../Structural/Proxy/README.rst:12 +msgid "" +"Doctrine2 uses proxies to implement framework magic (e.g. lazy " +"initialization) in them, while the user still works with his own entity " +"classes and will never use nor touch the proxies" +msgstr "" + +#: ../../Structural/Proxy/README.rst:17 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Proxy/README.rst:24 +msgid "Code" +msgstr "" + +#: ../../Structural/Proxy/README.rst:26 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Proxy/README.rst:28 +msgid "Record.php" +msgstr "" + +#: ../../Structural/Proxy/README.rst:34 +msgid "RecordProxy.php" +msgstr "" + +#: ../../Structural/Proxy/README.rst:41 +msgid "Test" +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Structural/README.po b/locale/ca/LC_MESSAGES/Structural/README.po new file mode 100644 index 0000000..2d2af2d --- /dev/null +++ b/locale/ca/LC_MESSAGES/Structural/README.po @@ -0,0 +1,23 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/README.rst:2 +msgid "Structural" +msgstr "" + +#: ../../Structural/README.rst:4 +msgid "" +"In Software Engineering, Structural Design Patterns are Design Patterns that" +" ease the design by identifying a simple way to realize relationships " +"between entities." +msgstr "" diff --git a/locale/ca/LC_MESSAGES/Structural/Registry/README.po b/locale/ca/LC_MESSAGES/Structural/Registry/README.po new file mode 100644 index 0000000..8cff9f1 --- /dev/null +++ b/locale/ca/LC_MESSAGES/Structural/Registry/README.po @@ -0,0 +1,67 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Registry/README.rst:2 +msgid "`Registry`_" +msgstr "" + +#: ../../Structural/Registry/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Registry/README.rst:7 +msgid "" +"To implement a central storage for objects often used throughout the " +"application, is typically implemented using an abstract class with only " +"static methods (or using the Singleton pattern)" +msgstr "" + +#: ../../Structural/Registry/README.rst:12 +msgid "Examples" +msgstr "" + +#: ../../Structural/Registry/README.rst:14 +msgid "" +"Zend Framework: ``Zend_Registry`` holds the application's logger object, " +"front controller etc." +msgstr "" + +#: ../../Structural/Registry/README.rst:16 +msgid "" +"Yii Framework: ``CWebApplication`` holds all the application components, " +"such as ``CWebUser``, ``CUrlManager``, etc." +msgstr "" + +#: ../../Structural/Registry/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Registry/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Structural/Registry/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Registry/README.rst:31 +msgid "Registry.php" +msgstr "" + +#: ../../Structural/Registry/README.rst:38 +msgid "Test" +msgstr "" + +#: ../../Structural/Registry/README.rst:40 +msgid "Tests/RegistryTest.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po b/locale/es/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po new file mode 100644 index 0000000..5441787 --- /dev/null +++ b/locale/es/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po @@ -0,0 +1,90 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:2 +msgid "`Chain Of Responsibilities`_" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:5 +msgid "Purpose:" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:7 +msgid "" +"To build a chain of objects to handle a call in sequential order. If one " +"object cannot handle a call, it delegates the call to the next in the chain " +"and so forth." +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:12 +msgid "Examples:" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:14 +msgid "" +"logging framework, where each chain element decides autonomously what to do " +"with a log message" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:16 +msgid "a Spam filter" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:17 +msgid "" +"Caching: first object is an instance of e.g. a Memcached Interface, if that " +"\"misses\" it delegates the call to the database interface" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:19 +msgid "" +"Yii Framework: CFilterChain is a chain of controller action filters. the " +"executing point is passed from one filter to the next along the chain, and " +"only if all filters say \"yes\", the action can be invoked at last." +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:25 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:32 +msgid "Code" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:34 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:36 +msgid "Request.php" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:42 +msgid "Handler.php" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:48 +msgid "Responsible/SlowStorage.php" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:54 +msgid "Responsible/FastStorage.php" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:61 +msgid "Test" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:63 +msgid "Tests/ChainTest.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Behavioral/Command/README.po b/locale/es/LC_MESSAGES/Behavioral/Command/README.po new file mode 100644 index 0000000..34ee70f --- /dev/null +++ b/locale/es/LC_MESSAGES/Behavioral/Command/README.po @@ -0,0 +1,99 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Command/README.rst:2 +msgid "`Command`_" +msgstr "" + +#: ../../Behavioral/Command/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Command/README.rst:7 +msgid "To encapsulate invocation and decoupling." +msgstr "" + +#: ../../Behavioral/Command/README.rst:9 +msgid "" +"We have an Invoker and a Receiver. This pattern uses a \"Command\" to " +"delegate the method call against the Receiver and presents the same method " +"\"execute\". Therefore, the Invoker just knows to call \"execute\" to " +"process the Command of the client. The Receiver is decoupled from the " +"Invoker." +msgstr "" + +#: ../../Behavioral/Command/README.rst:15 +msgid "" +"The second aspect of this pattern is the undo(), which undoes the method " +"execute(). Command can also be aggregated to combine more complex commands " +"with minimum copy-paste and relying on composition over inheritance." +msgstr "" + +#: ../../Behavioral/Command/README.rst:21 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Command/README.rst:23 +msgid "" +"A text editor : all events are Command which can be undone, stacked and " +"saved." +msgstr "" + +#: ../../Behavioral/Command/README.rst:25 +msgid "" +"Symfony2: SF2 Commands that can be run from the CLI are built with just the " +"Command pattern in mind" +msgstr "" + +#: ../../Behavioral/Command/README.rst:27 +msgid "" +"big CLI tools use subcommands to distribute various tasks and pack them in " +"\"modules\", each of these can be implemented with the Command pattern (e.g." +" vagrant)" +msgstr "" + +#: ../../Behavioral/Command/README.rst:32 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Command/README.rst:39 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Command/README.rst:41 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Command/README.rst:43 +msgid "CommandInterface.php" +msgstr "" + +#: ../../Behavioral/Command/README.rst:49 +msgid "HelloCommand.php" +msgstr "" + +#: ../../Behavioral/Command/README.rst:55 +msgid "Receiver.php" +msgstr "" + +#: ../../Behavioral/Command/README.rst:61 +msgid "Invoker.php" +msgstr "" + +#: ../../Behavioral/Command/README.rst:68 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Command/README.rst:70 +msgid "Tests/CommandTest.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Behavioral/Iterator/README.po b/locale/es/LC_MESSAGES/Behavioral/Iterator/README.po new file mode 100644 index 0000000..2a298e9 --- /dev/null +++ b/locale/es/LC_MESSAGES/Behavioral/Iterator/README.po @@ -0,0 +1,83 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Iterator/README.rst:2 +msgid "`Iterator`_" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:7 +msgid "" +"To make an object iterable and to make it appear like a collection of " +"objects." +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:11 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:13 +msgid "" +"to process a file line by line by just running over all lines (which have an" +" object representation) for a file (which of course is an object, too)" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:18 +msgid "Note" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:20 +msgid "" +"Standard PHP Library (SPL) defines an interface Iterator which is best " +"suited for this! Often you would want to implement the Countable interface " +"too, to allow ``count($object)`` on your iterable object" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:25 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:32 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:34 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:36 +msgid "Book.php" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:42 +msgid "BookList.php" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:48 +msgid "BookListIterator.php" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:54 +msgid "BookListReverseIterator.php" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:61 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:63 +msgid "Tests/IteratorTest.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Behavioral/Mediator/README.po b/locale/es/LC_MESSAGES/Behavioral/Mediator/README.po new file mode 100644 index 0000000..f2e9514 --- /dev/null +++ b/locale/es/LC_MESSAGES/Behavioral/Mediator/README.po @@ -0,0 +1,78 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Mediator/README.rst:2 +msgid "`Mediator`_" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:7 +msgid "" +"This pattern provides an easy to decouple many components working together. " +"It is a good alternative over Observer IF you have a \"central " +"intelligence\", like a controller (but not in the sense of the MVC)." +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:11 +msgid "" +"All components (called Colleague) are only coupled to the MediatorInterface " +"and it is a good thing because in OOP, one good friend is better than many. " +"This is the key-feature of this pattern." +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:16 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:23 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:25 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:27 +msgid "MediatorInterface.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:33 +msgid "Mediator.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:39 +msgid "Colleague.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:45 +msgid "Subsystem/Client.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:51 +msgid "Subsystem/Database.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:57 +msgid "Subsystem/Server.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:64 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:66 +msgid "Tests/MediatorTest.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Behavioral/Memento/README.po b/locale/es/LC_MESSAGES/Behavioral/Memento/README.po new file mode 100644 index 0000000..9ac83df --- /dev/null +++ b/locale/es/LC_MESSAGES/Behavioral/Memento/README.po @@ -0,0 +1,85 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Memento/README.rst:2 +msgid "`Memento`_" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:7 +msgid "" +"Provide the ability to restore an object to its previous state (undo via " +"rollback)." +msgstr "" + +#: ../../Behavioral/Memento/README.rst:10 +msgid "" +"The memento pattern is implemented with three objects: the originator, a " +"caretaker and a memento. The originator is some object that has an internal " +"state. The caretaker is going to do something to the originator, but wants " +"to be able to undo the change. The caretaker first asks the originator for a" +" memento object. Then it does whatever operation (or sequence of operations)" +" it was going to do. To roll back to the state before the operations, it " +"returns the memento object to the originator. The memento object itself is " +"an opaque object (one which the caretaker cannot, or should not, change). " +"When using this pattern, care should be taken if the originator may change " +"other objects or resources - the memento pattern operates on a single " +"object." +msgstr "" + +#: ../../Behavioral/Memento/README.rst:23 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:25 +msgid "The seed of a pseudorandom number generator" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:26 +msgid "The state in a finite state machine" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:29 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:36 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:38 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:40 +msgid "Memento.php" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:46 +msgid "Originator.php" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:52 +msgid "Caretaker.php" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:59 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:61 +msgid "Tests/MementoTest.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Behavioral/NullObject/README.po b/locale/es/LC_MESSAGES/Behavioral/NullObject/README.po new file mode 100644 index 0000000..28e1eea --- /dev/null +++ b/locale/es/LC_MESSAGES/Behavioral/NullObject/README.po @@ -0,0 +1,103 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/NullObject/README.rst:2 +msgid "`Null Object`_" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:7 +msgid "" +"NullObject is not a GoF design pattern but a schema which appears frequently" +" enough to be considered a pattern. It has the following benefits:" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:11 +msgid "Client code is simplified" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:12 +msgid "Reduces the chance of null pointer exceptions" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:13 +msgid "Fewer conditionals require less test cases" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:15 +msgid "" +"Methods that return an object or null should instead return an object or " +"``NullObject``. ``NullObject``\\ s simplify boilerplate code such as ``if " +"(!is_null($obj)) { $obj->callSomething(); }`` to just " +"``$obj->callSomething();`` by eliminating the conditional check in client " +"code." +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:22 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:24 +msgid "Symfony2: null logger of profiler" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:25 +msgid "Symfony2: null output in Symfony/Console" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:26 +msgid "null handler in a Chain of Responsibilities pattern" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:27 +msgid "null command in a Command pattern" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:30 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:37 +msgid "Code" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:39 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:41 +msgid "Service.php" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:47 +msgid "LoggerInterface.php" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:53 +msgid "PrintLogger.php" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:59 +msgid "NullLogger.php" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:66 +msgid "Test" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:68 +msgid "Tests/LoggerTest.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Behavioral/Observer/README.po b/locale/es/LC_MESSAGES/Behavioral/Observer/README.po new file mode 100644 index 0000000..84dd8a9 --- /dev/null +++ b/locale/es/LC_MESSAGES/Behavioral/Observer/README.po @@ -0,0 +1,75 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Observer/README.rst:2 +msgid "`Observer`_" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:7 +msgid "" +"To implement a publish/subscribe behaviour to an object, whenever a " +"\"Subject\" object changes it's state, the attached \"Observers\" will be " +"notified. It is used to shorten the amount of coupled objects and uses loose" +" coupling instead." +msgstr "" + +#: ../../Behavioral/Observer/README.rst:13 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:15 +msgid "" +"a message queue system is observed to show the progress of a job in a GUI" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:19 +msgid "Note" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:21 +msgid "" +"PHP already defines two interfaces that can help to implement this pattern: " +"SplObserver and SplSubject." +msgstr "" + +#: ../../Behavioral/Observer/README.rst:25 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:32 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:34 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:36 +msgid "User.php" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:42 +msgid "UserObserver.php" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:49 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:51 +msgid "Tests/ObserverTest.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Behavioral/README.po b/locale/es/LC_MESSAGES/Behavioral/README.po new file mode 100644 index 0000000..d773162 --- /dev/null +++ b/locale/es/LC_MESSAGES/Behavioral/README.po @@ -0,0 +1,24 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/README.rst:2 +msgid "Behavioral" +msgstr "" + +#: ../../Behavioral/README.rst:4 +msgid "" +"In software engineering, behavioral design patterns are design patterns that" +" identify common communication patterns between objects and realize these " +"patterns. By doing so, these patterns increase flexibility in carrying out " +"this communication." +msgstr "" diff --git a/locale/es/LC_MESSAGES/Behavioral/Specification/README.po b/locale/es/LC_MESSAGES/Behavioral/Specification/README.po new file mode 100644 index 0000000..79bcea6 --- /dev/null +++ b/locale/es/LC_MESSAGES/Behavioral/Specification/README.po @@ -0,0 +1,84 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Specification/README.rst:2 +msgid "`Specification`_" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:7 +msgid "" +"Builds a clear specification of business rules, where objects can be checked" +" against. The composite specification class has one method called " +"``isSatisfiedBy`` that returns either true or false depending on whether the" +" given object satisfies the specification." +msgstr "" + +#: ../../Behavioral/Specification/README.rst:13 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:15 +msgid "`RulerZ `__" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:18 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:25 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:27 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:29 +msgid "Item.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:35 +msgid "SpecificationInterface.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:41 +msgid "AbstractSpecification.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:47 +msgid "Either.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:53 +msgid "PriceSpecification.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:59 +msgid "Plus.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:65 +msgid "Not.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:72 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:74 +msgid "Tests/SpecificationTest.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Behavioral/State/README.po b/locale/es/LC_MESSAGES/Behavioral/State/README.po new file mode 100644 index 0000000..a6ed567 --- /dev/null +++ b/locale/es/LC_MESSAGES/Behavioral/State/README.po @@ -0,0 +1,63 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/State/README.rst:2 +msgid "`State`_" +msgstr "" + +#: ../../Behavioral/State/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/State/README.rst:7 +msgid "" +"Encapsulate varying behavior for the same routine based on an object's " +"state. This can be a cleaner way for an object to change its behavior at " +"runtime without resorting to large monolithic conditional statements." +msgstr "" + +#: ../../Behavioral/State/README.rst:12 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/State/README.rst:19 +msgid "Code" +msgstr "" + +#: ../../Behavioral/State/README.rst:21 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/State/README.rst:23 +msgid "OrderController.php" +msgstr "" + +#: ../../Behavioral/State/README.rst:29 +msgid "OrderFactory.php" +msgstr "" + +#: ../../Behavioral/State/README.rst:35 +msgid "OrderInterface.php" +msgstr "" + +#: ../../Behavioral/State/README.rst:41 +msgid "ShippingOrder.php" +msgstr "" + +#: ../../Behavioral/State/README.rst:47 +msgid "CreateOrder.php" +msgstr "" + +#: ../../Behavioral/State/README.rst:54 +msgid "Test" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Behavioral/Strategy/README.po b/locale/es/LC_MESSAGES/Behavioral/Strategy/README.po new file mode 100644 index 0000000..83278ed --- /dev/null +++ b/locale/es/LC_MESSAGES/Behavioral/Strategy/README.po @@ -0,0 +1,92 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Strategy/README.rst:2 +msgid "`Strategy`_" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:5 +msgid "Terminology:" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:7 +msgid "Context" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:8 +msgid "Strategy" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:9 +msgid "Concrete Strategy" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:12 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:14 +msgid "" +"To separate strategies and to enable fast switching between them. Also this " +"pattern is a good alternative to inheritance (instead of having an abstract " +"class that is extended)." +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:19 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:21 +msgid "sorting a list of objects, one strategy by date, the other by id" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:22 +msgid "" +"simplify unit testing: e.g. switching between file and in-memory storage" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:26 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:33 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:35 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:37 +msgid "ObjectCollection.php" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:43 +msgid "ComparatorInterface.php" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:49 +msgid "DateComparator.php" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:55 +msgid "IdComparator.php" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:62 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:64 +msgid "Tests/StrategyTest.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Behavioral/TemplateMethod/README.po b/locale/es/LC_MESSAGES/Behavioral/TemplateMethod/README.po new file mode 100644 index 0000000..4fea331 --- /dev/null +++ b/locale/es/LC_MESSAGES/Behavioral/TemplateMethod/README.po @@ -0,0 +1,83 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/TemplateMethod/README.rst:2 +msgid "`Template Method`_" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:7 +msgid "Template Method is a behavioral design pattern." +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:9 +msgid "" +"Perhaps you have encountered it many times already. The idea is to let " +"subclasses of this abstract template \"finish\" the behavior of an " +"algorithm." +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:13 +msgid "" +"A.k.a the \"Hollywood principle\": \"Don't call us, we call you.\" This " +"class is not called by subclasses but the inverse. How? With abstraction of " +"course." +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:17 +msgid "" +"In other words, this is a skeleton of algorithm, well-suited for framework " +"libraries. The user has just to implement one method and the superclass do " +"the job." +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:21 +msgid "" +"It is an easy way to decouple concrete classes and reduce copy-paste, that's" +" why you'll find it everywhere." +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:25 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:32 +msgid "Code" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:34 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:36 +msgid "Journey.php" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:42 +msgid "BeachJourney.php" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:48 +msgid "CityJourney.php" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:55 +msgid "Test" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:57 +msgid "Tests/JourneyTest.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Behavioral/Visitor/README.po b/locale/es/LC_MESSAGES/Behavioral/Visitor/README.po new file mode 100644 index 0000000..1664fe3 --- /dev/null +++ b/locale/es/LC_MESSAGES/Behavioral/Visitor/README.po @@ -0,0 +1,75 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Visitor/README.rst:2 +msgid "`Visitor`_" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:7 +msgid "" +"The Visitor Pattern lets you outsource operations on objects to other " +"objects. The main reason to do this is to keep a separation of concerns. But" +" classes have to define a contract to allow visitors (the ``Role::accept`` " +"method in the example)." +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:12 +msgid "" +"The contract is an abstract class but you can have also a clean interface. " +"In that case, each Visitor has to choose itself which method to invoke on " +"the visitor." +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:17 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:24 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:26 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:28 +msgid "RoleVisitorInterface.php" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:34 +msgid "RolePrintVisitor.php" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:40 +msgid "Role.php" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:46 +msgid "User.php" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:52 +msgid "Group.php" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:59 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:61 +msgid "Tests/VisitorTest.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Creational/AbstractFactory/README.po b/locale/es/LC_MESSAGES/Creational/AbstractFactory/README.po new file mode 100644 index 0000000..6213f0e --- /dev/null +++ b/locale/es/LC_MESSAGES/Creational/AbstractFactory/README.po @@ -0,0 +1,88 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/AbstractFactory/README.rst:2 +msgid "`Abstract Factory`_" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:7 +msgid "" +"To create series of related or dependent objects without specifying their " +"concrete classes. Usually the created classes all implement the same " +"interface. The client of the abstract factory does not care about how these " +"objects are created, he just knows how they go together." +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:13 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:20 +msgid "Code" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:22 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:24 +msgid "AbstractFactory.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:30 +msgid "JsonFactory.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:36 +msgid "HtmlFactory.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:42 +msgid "MediaInterface.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:48 +msgid "Picture.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:54 +msgid "Text.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:60 +msgid "Json/Picture.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:66 +msgid "Json/Text.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:72 +msgid "Html/Picture.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:78 +msgid "Html/Text.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:85 +msgid "Test" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:87 +msgid "Tests/AbstractFactoryTest.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Creational/Builder/README.po b/locale/es/LC_MESSAGES/Creational/Builder/README.po new file mode 100644 index 0000000..dfb357a --- /dev/null +++ b/locale/es/LC_MESSAGES/Creational/Builder/README.po @@ -0,0 +1,110 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/Builder/README.rst:2 +msgid "`Builder`_" +msgstr "" + +#: ../../Creational/Builder/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/Builder/README.rst:7 +msgid "Builder is an interface that build parts of a complex object." +msgstr "" + +#: ../../Creational/Builder/README.rst:9 +msgid "" +"Sometimes, if the builder has a better knowledge of what it builds, this " +"interface could be an abstract class with default methods (aka adapter)." +msgstr "" + +#: ../../Creational/Builder/README.rst:12 +msgid "" +"If you have a complex inheritance tree for objects, it is logical to have a " +"complex inheritance tree for builders too." +msgstr "" + +#: ../../Creational/Builder/README.rst:15 +msgid "" +"Note: Builders have often a fluent interface, see the mock builder of " +"PHPUnit for example." +msgstr "" + +#: ../../Creational/Builder/README.rst:19 +msgid "Examples" +msgstr "" + +#: ../../Creational/Builder/README.rst:21 +msgid "PHPUnit: Mock Builder" +msgstr "" + +#: ../../Creational/Builder/README.rst:24 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/Builder/README.rst:31 +msgid "Code" +msgstr "" + +#: ../../Creational/Builder/README.rst:33 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/Builder/README.rst:35 +msgid "Director.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:41 +msgid "BuilderInterface.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:47 +msgid "BikeBuilder.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:53 +msgid "CarBuilder.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:59 +msgid "Parts/Vehicle.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:65 +msgid "Parts/Bike.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:71 +msgid "Parts/Car.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:77 +msgid "Parts/Engine.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:83 +msgid "Parts/Wheel.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:89 +msgid "Parts/Door.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:96 +msgid "Test" +msgstr "" + +#: ../../Creational/Builder/README.rst:98 +msgid "Tests/DirectorTest.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Creational/FactoryMethod/README.po b/locale/es/LC_MESSAGES/Creational/FactoryMethod/README.po new file mode 100644 index 0000000..29fd708 --- /dev/null +++ b/locale/es/LC_MESSAGES/Creational/FactoryMethod/README.po @@ -0,0 +1,90 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/FactoryMethod/README.rst:2 +msgid "`Factory Method`_" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:7 +msgid "" +"The good point over the SimpleFactory is you can subclass it to implement " +"different ways to create objects" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:10 +msgid "For simple case, this abstract class could be just an interface" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:12 +msgid "" +"This pattern is a \"real\" Design Pattern because it achieves the " +"\"Dependency Inversion Principle\" a.k.a the \"D\" in S.O.L.I.D principles." +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:15 +msgid "" +"It means the FactoryMethod class depends on abstractions, not concrete " +"classes. This is the real trick compared to SimpleFactory or StaticFactory." +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:31 +msgid "FactoryMethod.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:37 +msgid "ItalianFactory.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:43 +msgid "GermanFactory.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:49 +msgid "VehicleInterface.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:55 +msgid "Porsche.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:61 +msgid "Bicycle.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:67 +msgid "Ferrari.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:74 +msgid "Test" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:76 +msgid "Tests/FactoryMethodTest.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Creational/Multiton/README.po b/locale/es/LC_MESSAGES/Creational/Multiton/README.po new file mode 100644 index 0000000..0990e3c --- /dev/null +++ b/locale/es/LC_MESSAGES/Creational/Multiton/README.po @@ -0,0 +1,64 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/Multiton/README.rst:2 +msgid "Multiton" +msgstr "" + +#: ../../Creational/Multiton/README.rst:4 +msgid "" +"**THIS IS CONSIDERED TO BE AN ANTI-PATTERN! FOR BETTER TESTABILITY AND " +"MAINTAINABILITY USE DEPENDENCY INJECTION!**" +msgstr "" + +#: ../../Creational/Multiton/README.rst:8 +msgid "Purpose" +msgstr "" + +#: ../../Creational/Multiton/README.rst:10 +msgid "" +"To have only a list of named instances that are used, like a singleton but " +"with n instances." +msgstr "" + +#: ../../Creational/Multiton/README.rst:14 +msgid "Examples" +msgstr "" + +#: ../../Creational/Multiton/README.rst:16 +msgid "2 DB Connectors, e.g. one for MySQL, the other for SQLite" +msgstr "" + +#: ../../Creational/Multiton/README.rst:17 +msgid "multiple Loggers (one for debug messages, one for errors)" +msgstr "" + +#: ../../Creational/Multiton/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/Multiton/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Creational/Multiton/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/Multiton/README.rst:31 +msgid "Multiton.php" +msgstr "" + +#: ../../Creational/Multiton/README.rst:38 +msgid "Test" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Creational/Pool/README.po b/locale/es/LC_MESSAGES/Creational/Pool/README.po new file mode 100644 index 0000000..6d829be --- /dev/null +++ b/locale/es/LC_MESSAGES/Creational/Pool/README.po @@ -0,0 +1,81 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/Pool/README.rst:2 +msgid "`Pool`_" +msgstr "" + +#: ../../Creational/Pool/README.rst:4 +msgid "" +"The **object pool pattern** is a software creational design pattern that " +"uses a set of initialized objects kept ready to use – a \"pool\" – rather " +"than allocating and destroying them on demand. A client of the pool will " +"request an object from the pool and perform operations on the returned " +"object. When the client has finished, it returns the object, which is a " +"specific type of factory object, to the pool rather than destroying it." +msgstr "" + +#: ../../Creational/Pool/README.rst:11 +msgid "" +"Object pooling can offer a significant performance boost in situations where" +" the cost of initializing a class instance is high, the rate of " +"instantiation of a class is high, and the number of instances in use at any " +"one time is low. The pooled object is obtained in predictable time when " +"creation of the new objects (especially over network) may take variable " +"time." +msgstr "" + +#: ../../Creational/Pool/README.rst:18 +msgid "" +"However these benefits are mostly true for objects that are expensive with " +"respect to time, such as database connections, socket connections, threads " +"and large graphic objects like fonts or bitmaps. In certain situations, " +"simple object pooling (that hold no external resources, but only occupy " +"memory) may not be efficient and could decrease performance." +msgstr "" + +#: ../../Creational/Pool/README.rst:25 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/Pool/README.rst:32 +msgid "Code" +msgstr "" + +#: ../../Creational/Pool/README.rst:34 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/Pool/README.rst:36 +msgid "Pool.php" +msgstr "" + +#: ../../Creational/Pool/README.rst:42 +msgid "Processor.php" +msgstr "" + +#: ../../Creational/Pool/README.rst:48 +msgid "Worker.php" +msgstr "" + +#: ../../Creational/Pool/README.rst:55 +msgid "Test" +msgstr "" + +#: ../../Creational/Pool/README.rst:57 +msgid "Tests/PoolTest.php" +msgstr "" + +#: ../../Creational/Pool/README.rst:63 +msgid "Tests/TestWorker.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Creational/Prototype/README.po b/locale/es/LC_MESSAGES/Creational/Prototype/README.po new file mode 100644 index 0000000..6cdc786 --- /dev/null +++ b/locale/es/LC_MESSAGES/Creational/Prototype/README.po @@ -0,0 +1,68 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/Prototype/README.rst:2 +msgid "`Prototype`_" +msgstr "" + +#: ../../Creational/Prototype/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/Prototype/README.rst:7 +msgid "" +"To avoid the cost of creating objects the standard way (new Foo()) and " +"instead create a prototype and clone it." +msgstr "" + +#: ../../Creational/Prototype/README.rst:11 +msgid "Examples" +msgstr "" + +#: ../../Creational/Prototype/README.rst:13 +msgid "" +"Large amounts of data (e.g. create 1,000,000 rows in a database at once via " +"a ORM)." +msgstr "" + +#: ../../Creational/Prototype/README.rst:17 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/Prototype/README.rst:24 +msgid "Code" +msgstr "" + +#: ../../Creational/Prototype/README.rst:26 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/Prototype/README.rst:28 +msgid "index.php" +msgstr "" + +#: ../../Creational/Prototype/README.rst:34 +msgid "BookPrototype.php" +msgstr "" + +#: ../../Creational/Prototype/README.rst:40 +msgid "BarBookPrototype.php" +msgstr "" + +#: ../../Creational/Prototype/README.rst:46 +msgid "FooBookPrototype.php" +msgstr "" + +#: ../../Creational/Prototype/README.rst:53 +msgid "Test" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Creational/README.po b/locale/es/LC_MESSAGES/Creational/README.po new file mode 100644 index 0000000..4d9d72d --- /dev/null +++ b/locale/es/LC_MESSAGES/Creational/README.po @@ -0,0 +1,25 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/README.rst:2 +msgid "Creational" +msgstr "" + +#: ../../Creational/README.rst:4 +msgid "" +"In software engineering, creational design patterns are design patterns that" +" deal with object creation mechanisms, trying to create objects in a manner " +"suitable to the situation. The basic form of object creation could result in" +" design problems or added complexity to the design. Creational design " +"patterns solve this problem by somehow controlling this object creation." +msgstr "" diff --git a/locale/es/LC_MESSAGES/Creational/SimpleFactory/README.po b/locale/es/LC_MESSAGES/Creational/SimpleFactory/README.po new file mode 100644 index 0000000..a36955e --- /dev/null +++ b/locale/es/LC_MESSAGES/Creational/SimpleFactory/README.po @@ -0,0 +1,72 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/SimpleFactory/README.rst:2 +msgid "Simple Factory" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:7 +msgid "ConcreteFactory is a simple factory pattern." +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:9 +msgid "" +"It differs from the static factory because it is NOT static and as you know:" +" static => global => evil!" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:12 +msgid "" +"Therefore, you can have multiple factories, differently parametrized, you " +"can subclass it and you can mock-up it." +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:16 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:23 +msgid "Code" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:25 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:27 +msgid "ConcreteFactory.php" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:33 +msgid "VehicleInterface.php" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:39 +msgid "Bicycle.php" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:45 +msgid "Scooter.php" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:52 +msgid "Test" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:54 +msgid "Tests/SimpleFactoryTest.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Creational/Singleton/README.po b/locale/es/LC_MESSAGES/Creational/Singleton/README.po new file mode 100644 index 0000000..4911734 --- /dev/null +++ b/locale/es/LC_MESSAGES/Creational/Singleton/README.po @@ -0,0 +1,75 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/Singleton/README.rst:2 +msgid "`Singleton`_" +msgstr "" + +#: ../../Creational/Singleton/README.rst:4 +msgid "" +"**THIS IS CONSIDERED TO BE AN ANTI-PATTERN! FOR BETTER TESTABILITY AND " +"MAINTAINABILITY USE DEPENDENCY INJECTION!**" +msgstr "" + +#: ../../Creational/Singleton/README.rst:8 +msgid "Purpose" +msgstr "" + +#: ../../Creational/Singleton/README.rst:10 +msgid "" +"To have only one instance of this object in the application that will handle" +" all calls." +msgstr "" + +#: ../../Creational/Singleton/README.rst:14 +msgid "Examples" +msgstr "" + +#: ../../Creational/Singleton/README.rst:16 +msgid "DB Connector" +msgstr "" + +#: ../../Creational/Singleton/README.rst:17 +msgid "" +"Logger (may also be a Multiton if there are many log files for several " +"purposes)" +msgstr "" + +#: ../../Creational/Singleton/README.rst:19 +msgid "" +"Lock file for the application (there is only one in the filesystem ...)" +msgstr "" + +#: ../../Creational/Singleton/README.rst:23 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/Singleton/README.rst:30 +msgid "Code" +msgstr "" + +#: ../../Creational/Singleton/README.rst:32 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/Singleton/README.rst:34 +msgid "Singleton.php" +msgstr "" + +#: ../../Creational/Singleton/README.rst:41 +msgid "Test" +msgstr "" + +#: ../../Creational/Singleton/README.rst:43 +msgid "Tests/SingletonTest.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Creational/StaticFactory/README.po b/locale/es/LC_MESSAGES/Creational/StaticFactory/README.po new file mode 100644 index 0000000..3e84e15 --- /dev/null +++ b/locale/es/LC_MESSAGES/Creational/StaticFactory/README.po @@ -0,0 +1,75 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/StaticFactory/README.rst:2 +msgid "Static Factory" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:7 +msgid "" +"Similar to the AbstractFactory, this pattern is used to create series of " +"related or dependent objects. The difference between this and the abstract " +"factory pattern is that the static factory pattern uses just one static " +"method to create all types of objects it can create. It is usually named " +"``factory`` or ``build``." +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:14 +msgid "Examples" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:16 +msgid "" +"Zend Framework: ``Zend_Cache_Backend`` or ``_Frontend`` use a factory method" +" create cache backends or frontends" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:31 +msgid "StaticFactory.php" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:37 +msgid "FormatterInterface.php" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:43 +msgid "FormatString.php" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:49 +msgid "FormatNumber.php" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:56 +msgid "Test" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:58 +msgid "Tests/StaticFactoryTest.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/More/Delegation/README.po b/locale/es/LC_MESSAGES/More/Delegation/README.po new file mode 100644 index 0000000..ff40269 --- /dev/null +++ b/locale/es/LC_MESSAGES/More/Delegation/README.po @@ -0,0 +1,60 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../More/Delegation/README.rst:2 +msgid "`Delegation`_" +msgstr "" + +#: ../../More/Delegation/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../More/Delegation/README.rst:7 ../../More/Delegation/README.rst:12 +msgid "..." +msgstr "" + +#: ../../More/Delegation/README.rst:10 +msgid "Examples" +msgstr "" + +#: ../../More/Delegation/README.rst:15 +msgid "UML Diagram" +msgstr "" + +#: ../../More/Delegation/README.rst:22 +msgid "Code" +msgstr "" + +#: ../../More/Delegation/README.rst:24 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../More/Delegation/README.rst:26 +msgid "Usage.php" +msgstr "" + +#: ../../More/Delegation/README.rst:32 +msgid "TeamLead.php" +msgstr "" + +#: ../../More/Delegation/README.rst:38 +msgid "JuniorDeveloper.php" +msgstr "" + +#: ../../More/Delegation/README.rst:45 +msgid "Test" +msgstr "" + +#: ../../More/Delegation/README.rst:47 +msgid "Tests/DelegationTest.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/More/README.po b/locale/es/LC_MESSAGES/More/README.po new file mode 100644 index 0000000..c4c30fe --- /dev/null +++ b/locale/es/LC_MESSAGES/More/README.po @@ -0,0 +1,16 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../More/README.rst:2 +msgid "More" +msgstr "" diff --git a/locale/es/LC_MESSAGES/More/Repository/README.po b/locale/es/LC_MESSAGES/More/Repository/README.po new file mode 100644 index 0000000..4849f4f --- /dev/null +++ b/locale/es/LC_MESSAGES/More/Repository/README.po @@ -0,0 +1,76 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../More/Repository/README.rst:2 +msgid "Repository" +msgstr "" + +#: ../../More/Repository/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../More/Repository/README.rst:7 +msgid "" +"Mediates between the domain and data mapping layers using a collection-like " +"interface for accessing domain objects. Repository encapsulates the set of " +"objects persisted in a data store and the operations performed over them, " +"providing a more object-oriented view of the persistence layer. Repository " +"also supports the objective of achieving a clean separation and one-way " +"dependency between the domain and data mapping layers." +msgstr "" + +#: ../../More/Repository/README.rst:16 +msgid "Examples" +msgstr "" + +#: ../../More/Repository/README.rst:18 +msgid "" +"Doctrine 2 ORM: there is Repository that mediates between Entity and DBAL " +"and contains methods to retrieve objects" +msgstr "" + +#: ../../More/Repository/README.rst:20 +msgid "Laravel Framework" +msgstr "" + +#: ../../More/Repository/README.rst:23 +msgid "UML Diagram" +msgstr "" + +#: ../../More/Repository/README.rst:30 +msgid "Code" +msgstr "" + +#: ../../More/Repository/README.rst:32 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../More/Repository/README.rst:34 +msgid "Post.php" +msgstr "" + +#: ../../More/Repository/README.rst:40 +msgid "PostRepository.php" +msgstr "" + +#: ../../More/Repository/README.rst:46 +msgid "Storage.php" +msgstr "" + +#: ../../More/Repository/README.rst:52 +msgid "MemoryStorage.php" +msgstr "" + +#: ../../More/Repository/README.rst:59 +msgid "Test" +msgstr "" diff --git a/locale/es/LC_MESSAGES/More/ServiceLocator/README.po b/locale/es/LC_MESSAGES/More/ServiceLocator/README.po new file mode 100644 index 0000000..8f3537e --- /dev/null +++ b/locale/es/LC_MESSAGES/More/ServiceLocator/README.po @@ -0,0 +1,94 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../More/ServiceLocator/README.rst:2 +msgid "`Service Locator`_" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:7 +msgid "" +"To implement a loosely coupled architecture in order to get better testable," +" maintainable and extendable code. DI pattern and Service Locator pattern " +"are an implementation of the Inverse of Control pattern." +msgstr "" + +#: ../../More/ServiceLocator/README.rst:12 +msgid "Usage" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:14 +msgid "" +"With ``ServiceLocator`` you can register a service for a given interface. By" +" using the interface you can retrieve the service and use it in the classes " +"of the application without knowing its implementation. You can configure and" +" inject the Service Locator object on bootstrap." +msgstr "" + +#: ../../More/ServiceLocator/README.rst:20 +msgid "Examples" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:22 +msgid "" +"Zend Framework 2 uses Service Locator to create and share services used in " +"the framework(i.e. EventManager, ModuleManager, all custom user services " +"provided by modules, etc...)" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:27 +msgid "UML Diagram" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:34 +msgid "Code" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:36 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:38 +msgid "ServiceLocatorInterface.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:44 +msgid "ServiceLocator.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:50 +msgid "LogServiceInterface.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:56 +msgid "LogService.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:62 +msgid "DatabaseServiceInterface.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:68 +msgid "DatabaseService.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:75 +msgid "Test" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:77 +msgid "Tests/ServiceLocatorTest.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/README.po b/locale/es/LC_MESSAGES/README.po new file mode 100644 index 0000000..84e21de --- /dev/null +++ b/locale/es/LC_MESSAGES/README.po @@ -0,0 +1,93 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../README.rst:5 +msgid "DesignPatternsPHP" +msgstr "" + +#: ../../README.rst:11 +msgid "" +"This is a collection of known `design patterns`_ and some sample code how to" +" implement them in PHP. Every pattern has a small list of examples (most of " +"them from Zend Framework, Symfony2 or Doctrine2 as I'm most familiar with " +"this software)." +msgstr "" + +#: ../../README.rst:16 +msgid "" +"I think the problem with patterns is that often people do know them but " +"don't know when to apply which." +msgstr "" + +#: ../../README.rst:20 +msgid "Patterns" +msgstr "" + +#: ../../README.rst:22 +msgid "" +"The patterns can be structured in roughly three different categories. Please" +" click on **the title of every pattern's page** for a full explanation of " +"the pattern on Wikipedia." +msgstr "" + +#: ../../README.rst:35 +msgid "Contribute" +msgstr "" + +#: ../../README.rst:37 +msgid "" +"Please feel free to fork and extend existing or add your own examples and " +"send a pull request with your changes! To establish a consistent code " +"quality, please check your code using `PHP CodeSniffer`_ against `PSR2 " +"standard`_ using ``./vendor/bin/phpcs -p --standard=PSR2 --ignore=vendor " +".``." +msgstr "" + +#: ../../README.rst:44 +msgid "License" +msgstr "" + +#: ../../README.rst:46 +msgid "(The MIT License)" +msgstr "" + +#: ../../README.rst:48 +msgid "Copyright (c) 2014 `Dominik Liebler`_ and `contributors`_" +msgstr "" + +#: ../../README.rst:50 +msgid "" +"Permission is hereby granted, free of charge, to any person obtaining a copy" +" of this software and associated documentation files (the 'Software'), to " +"deal in the Software without restriction, including without limitation the " +"rights to use, copy, modify, merge, publish, distribute, sublicense, and/or " +"sell copies of the Software, and to permit persons to whom the Software is " +"furnished to do so, subject to the following conditions:" +msgstr "" + +#: ../../README.rst:58 +msgid "" +"The above copyright notice and this permission notice shall be included in " +"all copies or substantial portions of the Software." +msgstr "" + +#: ../../README.rst:61 +msgid "" +"THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR " +"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, " +"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE " +"AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER " +"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING " +"FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS" +" IN THE SOFTWARE." +msgstr "" diff --git a/locale/es/LC_MESSAGES/Structural/Adapter/README.po b/locale/es/LC_MESSAGES/Structural/Adapter/README.po new file mode 100644 index 0000000..420b400 --- /dev/null +++ b/locale/es/LC_MESSAGES/Structural/Adapter/README.po @@ -0,0 +1,82 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Adapter/README.rst:2 +msgid "`Adapter / Wrapper`_" +msgstr "" + +#: ../../Structural/Adapter/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Adapter/README.rst:7 +msgid "" +"To translate one interface for a class into a compatible interface. An " +"adapter allows classes to work together that normally could not because of " +"incompatible interfaces by providing it's interface to clients while using " +"the original interface." +msgstr "" + +#: ../../Structural/Adapter/README.rst:13 +msgid "Examples" +msgstr "" + +#: ../../Structural/Adapter/README.rst:15 +msgid "DB Client libraries adapter" +msgstr "" + +#: ../../Structural/Adapter/README.rst:16 +msgid "" +"using multiple different webservices and adapters normalize data so that the" +" outcome is the same for all" +msgstr "" + +#: ../../Structural/Adapter/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Adapter/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Structural/Adapter/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Adapter/README.rst:31 +msgid "PaperBookInterface.php" +msgstr "" + +#: ../../Structural/Adapter/README.rst:37 +msgid "Book.php" +msgstr "" + +#: ../../Structural/Adapter/README.rst:43 +msgid "EBookAdapter.php" +msgstr "" + +#: ../../Structural/Adapter/README.rst:49 +msgid "EBookInterface.php" +msgstr "" + +#: ../../Structural/Adapter/README.rst:55 +msgid "Kindle.php" +msgstr "" + +#: ../../Structural/Adapter/README.rst:62 +msgid "Test" +msgstr "" + +#: ../../Structural/Adapter/README.rst:64 +msgid "Tests/AdapterTest.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Structural/Bridge/README.po b/locale/es/LC_MESSAGES/Structural/Bridge/README.po new file mode 100644 index 0000000..6e9ae00 --- /dev/null +++ b/locale/es/LC_MESSAGES/Structural/Bridge/README.po @@ -0,0 +1,78 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Bridge/README.rst:2 +msgid "`Bridge`_" +msgstr "" + +#: ../../Structural/Bridge/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Bridge/README.rst:7 +msgid "" +"Decouple an abstraction from its implementation so that the two can vary " +"independently. (http://en.wikipedia.org/wiki/Bridge\\_pattern)" +msgstr "" + +#: ../../Structural/Bridge/README.rst:11 +msgid "Sample:" +msgstr "" + +#: ../../Structural/Bridge/README.rst:13 +msgid "`Symfony DoctrineBridge `__" +msgstr "" + +#: ../../Structural/Bridge/README.rst:17 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Bridge/README.rst:24 +msgid "Code" +msgstr "" + +#: ../../Structural/Bridge/README.rst:26 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Bridge/README.rst:28 +msgid "Workshop.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:34 +msgid "Assemble.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:40 +msgid "Produce.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:46 +msgid "Vehicle.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:52 +msgid "Motorcycle.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:58 +msgid "Car.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:65 +msgid "Test" +msgstr "" + +#: ../../Structural/Bridge/README.rst:67 +msgid "Tests/BridgeTest.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Structural/Composite/README.po b/locale/es/LC_MESSAGES/Structural/Composite/README.po new file mode 100644 index 0000000..ce6ce1a --- /dev/null +++ b/locale/es/LC_MESSAGES/Structural/Composite/README.po @@ -0,0 +1,78 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Composite/README.rst:2 +msgid "`Composite`_" +msgstr "" + +#: ../../Structural/Composite/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Composite/README.rst:7 +msgid "" +"To treat a group of objects the same way as a single instance of the object." +msgstr "" + +#: ../../Structural/Composite/README.rst:11 +msgid "Examples" +msgstr "" + +#: ../../Structural/Composite/README.rst:13 +msgid "" +"a form class instance handles all its form elements like a single instance " +"of the form, when ``render()`` is called, it subsequently runs through all " +"its child elements and calls ``render()`` on them" +msgstr "" + +#: ../../Structural/Composite/README.rst:16 +msgid "" +"``Zend_Config``: a tree of configuration options, each one is a " +"``Zend_Config`` object itself" +msgstr "" + +#: ../../Structural/Composite/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Composite/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Structural/Composite/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Composite/README.rst:31 +msgid "FormElement.php" +msgstr "" + +#: ../../Structural/Composite/README.rst:37 +msgid "Form.php" +msgstr "" + +#: ../../Structural/Composite/README.rst:43 +msgid "InputElement.php" +msgstr "" + +#: ../../Structural/Composite/README.rst:49 +msgid "TextElement.php" +msgstr "" + +#: ../../Structural/Composite/README.rst:56 +msgid "Test" +msgstr "" + +#: ../../Structural/Composite/README.rst:58 +msgid "Tests/CompositeTest.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Structural/DataMapper/README.po b/locale/es/LC_MESSAGES/Structural/DataMapper/README.po new file mode 100644 index 0000000..28b8d4a --- /dev/null +++ b/locale/es/LC_MESSAGES/Structural/DataMapper/README.po @@ -0,0 +1,77 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/DataMapper/README.rst:2 +msgid "`Data Mapper`_" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:7 +msgid "" +"A Data Mapper, is a Data Access Layer that performs bidirectional transfer " +"of data between a persistent data store (often a relational database) and an" +" in memory data representation (the domain layer). The goal of the pattern " +"is to keep the in memory representation and the persistent data store " +"independent of each other and the data mapper itself. The layer is composed " +"of one or more mappers (or Data Access Objects), performing the data " +"transfer. Mapper implementations vary in scope. Generic mappers will handle " +"many different domain entity types, dedicated mappers will handle one or a " +"few." +msgstr "" + +#: ../../Structural/DataMapper/README.rst:17 +msgid "" +"The key point of this pattern is, unlike Active Record pattern, the data " +"model follows Single Responsibility Principle." +msgstr "" + +#: ../../Structural/DataMapper/README.rst:21 +msgid "Examples" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:23 +msgid "" +"DB Object Relational Mapper (ORM) : Doctrine2 uses DAO named as " +"\"EntityRepository\"" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:27 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:34 +msgid "Code" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:36 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:38 +msgid "User.php" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:44 +msgid "UserMapper.php" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:51 +msgid "Test" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:53 +msgid "Tests/DataMapperTest.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Structural/Decorator/README.po b/locale/es/LC_MESSAGES/Structural/Decorator/README.po new file mode 100644 index 0000000..b752b90 --- /dev/null +++ b/locale/es/LC_MESSAGES/Structural/Decorator/README.po @@ -0,0 +1,78 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Decorator/README.rst:2 +msgid "`Decorator`_" +msgstr "" + +#: ../../Structural/Decorator/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Decorator/README.rst:7 +msgid "To dynamically add new functionality to class instances." +msgstr "" + +#: ../../Structural/Decorator/README.rst:10 +msgid "Examples" +msgstr "" + +#: ../../Structural/Decorator/README.rst:12 +msgid "Zend Framework: decorators for ``Zend_Form_Element`` instances" +msgstr "" + +#: ../../Structural/Decorator/README.rst:13 +msgid "" +"Web Service Layer: Decorators JSON and XML for a REST service (in this case," +" only one of these should be allowed of course)" +msgstr "" + +#: ../../Structural/Decorator/README.rst:17 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Decorator/README.rst:24 +msgid "Code" +msgstr "" + +#: ../../Structural/Decorator/README.rst:26 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Decorator/README.rst:28 +msgid "RendererInterface.php" +msgstr "" + +#: ../../Structural/Decorator/README.rst:34 +msgid "Webservice.php" +msgstr "" + +#: ../../Structural/Decorator/README.rst:40 +msgid "Decorator.php" +msgstr "" + +#: ../../Structural/Decorator/README.rst:46 +msgid "RenderInXml.php" +msgstr "" + +#: ../../Structural/Decorator/README.rst:52 +msgid "RenderInJson.php" +msgstr "" + +#: ../../Structural/Decorator/README.rst:59 +msgid "Test" +msgstr "" + +#: ../../Structural/Decorator/README.rst:61 +msgid "Tests/DecoratorTest.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Structural/DependencyInjection/README.po b/locale/es/LC_MESSAGES/Structural/DependencyInjection/README.po new file mode 100644 index 0000000..9e6e9fa --- /dev/null +++ b/locale/es/LC_MESSAGES/Structural/DependencyInjection/README.po @@ -0,0 +1,107 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/DependencyInjection/README.rst:2 +msgid "`Dependency Injection`_" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:7 +msgid "" +"To implement a loosely coupled architecture in order to get better testable," +" maintainable and extendable code." +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:11 +msgid "Usage" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:13 +msgid "" +"Configuration gets injected and ``Connection`` will get all that it needs " +"from ``$config``. Without DI, the configuration would be created directly in" +" ``Connection``, which is not very good for testing and extending " +"``Connection``." +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:18 +msgid "" +"Notice we are following Inversion of control principle in ``Connection`` by " +"asking ``$config`` to implement ``Parameters`` interface. This decouples our" +" components. We don't care where the source of information comes from, we " +"only care that ``$config`` has certain methods to retrieve that information." +" Read more about Inversion of control `here " +"`__." +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:26 +msgid "Examples" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:28 +msgid "" +"The Doctrine2 ORM uses dependency injection e.g. for configuration that is " +"injected into a ``Connection`` object. For testing purposes, one can easily " +"create a mock object of the configuration and inject that into the " +"``Connection`` object" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:32 +msgid "" +"Symfony and Zend Framework 2 already have containers for DI that create " +"objects via a configuration array and inject them where needed (i.e. in " +"Controllers)" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:37 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:44 +msgid "Code" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:46 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:48 +msgid "AbstractConfig.php" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:54 +msgid "Parameters.php" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:60 +msgid "ArrayConfig.php" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:66 +msgid "Connection.php" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:73 +msgid "Test" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:75 +msgid "Tests/DependencyInjectionTest.php" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:81 +msgid "Tests/config.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Structural/Facade/README.po b/locale/es/LC_MESSAGES/Structural/Facade/README.po new file mode 100644 index 0000000..8f8fd9b --- /dev/null +++ b/locale/es/LC_MESSAGES/Structural/Facade/README.po @@ -0,0 +1,87 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Facade/README.rst:2 +msgid "`Facade`_" +msgstr "" + +#: ../../Structural/Facade/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Facade/README.rst:7 +msgid "" +"The primary goal of a Facade Pattern is not to avoid you to read the manual " +"of a complex API. It's only a side-effect. The first goal is to reduce " +"coupling and follow the Law of Demeter." +msgstr "" + +#: ../../Structural/Facade/README.rst:11 +msgid "" +"A Facade is meant to decouple a client and a sub-system by embedding many " +"(but sometimes just one) interface, and of course to reduce complexity." +msgstr "" + +#: ../../Structural/Facade/README.rst:15 +msgid "A facade does not forbid you the access to the sub-system" +msgstr "" + +#: ../../Structural/Facade/README.rst:16 +msgid "You can (you should) have multiple facades for one sub-system" +msgstr "" + +#: ../../Structural/Facade/README.rst:18 +msgid "" +"That's why a good facade has no ``new`` in it. If there are multiple " +"creations for each method, it is not a Facade, it's a Builder or a " +"[Abstract\\|Static\\|Simple] Factory [Method]." +msgstr "" + +#: ../../Structural/Facade/README.rst:22 +msgid "" +"The best facade has no ``new`` and a constructor with interface-type-hinted " +"parameters. If you need creation of new instances, use a Factory as " +"argument." +msgstr "" + +#: ../../Structural/Facade/README.rst:27 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Facade/README.rst:34 +msgid "Code" +msgstr "" + +#: ../../Structural/Facade/README.rst:36 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Facade/README.rst:38 +msgid "Facade.php" +msgstr "" + +#: ../../Structural/Facade/README.rst:44 +msgid "OsInterface.php" +msgstr "" + +#: ../../Structural/Facade/README.rst:50 +msgid "BiosInterface.php" +msgstr "" + +#: ../../Structural/Facade/README.rst:57 +msgid "Test" +msgstr "" + +#: ../../Structural/Facade/README.rst:59 +msgid "Tests/FacadeTest.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Structural/FluentInterface/README.po b/locale/es/LC_MESSAGES/Structural/FluentInterface/README.po new file mode 100644 index 0000000..a0d1de7 --- /dev/null +++ b/locale/es/LC_MESSAGES/Structural/FluentInterface/README.po @@ -0,0 +1,66 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/FluentInterface/README.rst:2 +msgid "`Fluent Interface`_" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:7 +msgid "" +"To write code that is easy readable just like sentences in a natural " +"language (like English)." +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:11 +msgid "Examples" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:13 +msgid "Doctrine2's QueryBuilder works something like that example class below" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:15 +msgid "PHPUnit uses fluent interfaces to build mock objects" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:16 +msgid "Yii Framework: CDbCommand and CActiveRecord use this pattern, too" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:19 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:26 +msgid "Code" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:28 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:30 +msgid "Sql.php" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:37 +msgid "Test" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:39 +msgid "Tests/FluentInterfaceTest.php" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Structural/Proxy/README.po b/locale/es/LC_MESSAGES/Structural/Proxy/README.po new file mode 100644 index 0000000..3272dfd --- /dev/null +++ b/locale/es/LC_MESSAGES/Structural/Proxy/README.po @@ -0,0 +1,59 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Proxy/README.rst:2 +msgid "`Proxy`_" +msgstr "" + +#: ../../Structural/Proxy/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Proxy/README.rst:7 +msgid "To interface to anything that is expensive or impossible to duplicate." +msgstr "" + +#: ../../Structural/Proxy/README.rst:10 +msgid "Examples" +msgstr "" + +#: ../../Structural/Proxy/README.rst:12 +msgid "" +"Doctrine2 uses proxies to implement framework magic (e.g. lazy " +"initialization) in them, while the user still works with his own entity " +"classes and will never use nor touch the proxies" +msgstr "" + +#: ../../Structural/Proxy/README.rst:17 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Proxy/README.rst:24 +msgid "Code" +msgstr "" + +#: ../../Structural/Proxy/README.rst:26 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Proxy/README.rst:28 +msgid "Record.php" +msgstr "" + +#: ../../Structural/Proxy/README.rst:34 +msgid "RecordProxy.php" +msgstr "" + +#: ../../Structural/Proxy/README.rst:41 +msgid "Test" +msgstr "" diff --git a/locale/es/LC_MESSAGES/Structural/README.po b/locale/es/LC_MESSAGES/Structural/README.po new file mode 100644 index 0000000..2d2af2d --- /dev/null +++ b/locale/es/LC_MESSAGES/Structural/README.po @@ -0,0 +1,23 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/README.rst:2 +msgid "Structural" +msgstr "" + +#: ../../Structural/README.rst:4 +msgid "" +"In Software Engineering, Structural Design Patterns are Design Patterns that" +" ease the design by identifying a simple way to realize relationships " +"between entities." +msgstr "" diff --git a/locale/es/LC_MESSAGES/Structural/Registry/README.po b/locale/es/LC_MESSAGES/Structural/Registry/README.po new file mode 100644 index 0000000..8cff9f1 --- /dev/null +++ b/locale/es/LC_MESSAGES/Structural/Registry/README.po @@ -0,0 +1,67 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Registry/README.rst:2 +msgid "`Registry`_" +msgstr "" + +#: ../../Structural/Registry/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Registry/README.rst:7 +msgid "" +"To implement a central storage for objects often used throughout the " +"application, is typically implemented using an abstract class with only " +"static methods (or using the Singleton pattern)" +msgstr "" + +#: ../../Structural/Registry/README.rst:12 +msgid "Examples" +msgstr "" + +#: ../../Structural/Registry/README.rst:14 +msgid "" +"Zend Framework: ``Zend_Registry`` holds the application's logger object, " +"front controller etc." +msgstr "" + +#: ../../Structural/Registry/README.rst:16 +msgid "" +"Yii Framework: ``CWebApplication`` holds all the application components, " +"such as ``CWebUser``, ``CUrlManager``, etc." +msgstr "" + +#: ../../Structural/Registry/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Registry/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Structural/Registry/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Registry/README.rst:31 +msgid "Registry.php" +msgstr "" + +#: ../../Structural/Registry/README.rst:38 +msgid "Test" +msgstr "" + +#: ../../Structural/Registry/README.rst:40 +msgid "Tests/RegistryTest.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po b/locale/pt_BR/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po new file mode 100644 index 0000000..5441787 --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po @@ -0,0 +1,90 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:2 +msgid "`Chain Of Responsibilities`_" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:5 +msgid "Purpose:" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:7 +msgid "" +"To build a chain of objects to handle a call in sequential order. If one " +"object cannot handle a call, it delegates the call to the next in the chain " +"and so forth." +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:12 +msgid "Examples:" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:14 +msgid "" +"logging framework, where each chain element decides autonomously what to do " +"with a log message" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:16 +msgid "a Spam filter" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:17 +msgid "" +"Caching: first object is an instance of e.g. a Memcached Interface, if that " +"\"misses\" it delegates the call to the database interface" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:19 +msgid "" +"Yii Framework: CFilterChain is a chain of controller action filters. the " +"executing point is passed from one filter to the next along the chain, and " +"only if all filters say \"yes\", the action can be invoked at last." +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:25 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:32 +msgid "Code" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:34 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:36 +msgid "Request.php" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:42 +msgid "Handler.php" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:48 +msgid "Responsible/SlowStorage.php" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:54 +msgid "Responsible/FastStorage.php" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:61 +msgid "Test" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:63 +msgid "Tests/ChainTest.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Behavioral/Command/README.po b/locale/pt_BR/LC_MESSAGES/Behavioral/Command/README.po new file mode 100644 index 0000000..34ee70f --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Behavioral/Command/README.po @@ -0,0 +1,99 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Command/README.rst:2 +msgid "`Command`_" +msgstr "" + +#: ../../Behavioral/Command/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Command/README.rst:7 +msgid "To encapsulate invocation and decoupling." +msgstr "" + +#: ../../Behavioral/Command/README.rst:9 +msgid "" +"We have an Invoker and a Receiver. This pattern uses a \"Command\" to " +"delegate the method call against the Receiver and presents the same method " +"\"execute\". Therefore, the Invoker just knows to call \"execute\" to " +"process the Command of the client. The Receiver is decoupled from the " +"Invoker." +msgstr "" + +#: ../../Behavioral/Command/README.rst:15 +msgid "" +"The second aspect of this pattern is the undo(), which undoes the method " +"execute(). Command can also be aggregated to combine more complex commands " +"with minimum copy-paste and relying on composition over inheritance." +msgstr "" + +#: ../../Behavioral/Command/README.rst:21 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Command/README.rst:23 +msgid "" +"A text editor : all events are Command which can be undone, stacked and " +"saved." +msgstr "" + +#: ../../Behavioral/Command/README.rst:25 +msgid "" +"Symfony2: SF2 Commands that can be run from the CLI are built with just the " +"Command pattern in mind" +msgstr "" + +#: ../../Behavioral/Command/README.rst:27 +msgid "" +"big CLI tools use subcommands to distribute various tasks and pack them in " +"\"modules\", each of these can be implemented with the Command pattern (e.g." +" vagrant)" +msgstr "" + +#: ../../Behavioral/Command/README.rst:32 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Command/README.rst:39 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Command/README.rst:41 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Command/README.rst:43 +msgid "CommandInterface.php" +msgstr "" + +#: ../../Behavioral/Command/README.rst:49 +msgid "HelloCommand.php" +msgstr "" + +#: ../../Behavioral/Command/README.rst:55 +msgid "Receiver.php" +msgstr "" + +#: ../../Behavioral/Command/README.rst:61 +msgid "Invoker.php" +msgstr "" + +#: ../../Behavioral/Command/README.rst:68 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Command/README.rst:70 +msgid "Tests/CommandTest.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Behavioral/Iterator/README.po b/locale/pt_BR/LC_MESSAGES/Behavioral/Iterator/README.po new file mode 100644 index 0000000..2a298e9 --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Behavioral/Iterator/README.po @@ -0,0 +1,83 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Iterator/README.rst:2 +msgid "`Iterator`_" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:7 +msgid "" +"To make an object iterable and to make it appear like a collection of " +"objects." +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:11 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:13 +msgid "" +"to process a file line by line by just running over all lines (which have an" +" object representation) for a file (which of course is an object, too)" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:18 +msgid "Note" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:20 +msgid "" +"Standard PHP Library (SPL) defines an interface Iterator which is best " +"suited for this! Often you would want to implement the Countable interface " +"too, to allow ``count($object)`` on your iterable object" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:25 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:32 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:34 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:36 +msgid "Book.php" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:42 +msgid "BookList.php" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:48 +msgid "BookListIterator.php" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:54 +msgid "BookListReverseIterator.php" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:61 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:63 +msgid "Tests/IteratorTest.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Behavioral/Mediator/README.po b/locale/pt_BR/LC_MESSAGES/Behavioral/Mediator/README.po new file mode 100644 index 0000000..f2e9514 --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Behavioral/Mediator/README.po @@ -0,0 +1,78 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Mediator/README.rst:2 +msgid "`Mediator`_" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:7 +msgid "" +"This pattern provides an easy to decouple many components working together. " +"It is a good alternative over Observer IF you have a \"central " +"intelligence\", like a controller (but not in the sense of the MVC)." +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:11 +msgid "" +"All components (called Colleague) are only coupled to the MediatorInterface " +"and it is a good thing because in OOP, one good friend is better than many. " +"This is the key-feature of this pattern." +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:16 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:23 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:25 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:27 +msgid "MediatorInterface.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:33 +msgid "Mediator.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:39 +msgid "Colleague.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:45 +msgid "Subsystem/Client.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:51 +msgid "Subsystem/Database.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:57 +msgid "Subsystem/Server.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:64 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:66 +msgid "Tests/MediatorTest.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Behavioral/Memento/README.po b/locale/pt_BR/LC_MESSAGES/Behavioral/Memento/README.po new file mode 100644 index 0000000..9ac83df --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Behavioral/Memento/README.po @@ -0,0 +1,85 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Memento/README.rst:2 +msgid "`Memento`_" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:7 +msgid "" +"Provide the ability to restore an object to its previous state (undo via " +"rollback)." +msgstr "" + +#: ../../Behavioral/Memento/README.rst:10 +msgid "" +"The memento pattern is implemented with three objects: the originator, a " +"caretaker and a memento. The originator is some object that has an internal " +"state. The caretaker is going to do something to the originator, but wants " +"to be able to undo the change. The caretaker first asks the originator for a" +" memento object. Then it does whatever operation (or sequence of operations)" +" it was going to do. To roll back to the state before the operations, it " +"returns the memento object to the originator. The memento object itself is " +"an opaque object (one which the caretaker cannot, or should not, change). " +"When using this pattern, care should be taken if the originator may change " +"other objects or resources - the memento pattern operates on a single " +"object." +msgstr "" + +#: ../../Behavioral/Memento/README.rst:23 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:25 +msgid "The seed of a pseudorandom number generator" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:26 +msgid "The state in a finite state machine" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:29 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:36 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:38 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:40 +msgid "Memento.php" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:46 +msgid "Originator.php" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:52 +msgid "Caretaker.php" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:59 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:61 +msgid "Tests/MementoTest.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Behavioral/NullObject/README.po b/locale/pt_BR/LC_MESSAGES/Behavioral/NullObject/README.po new file mode 100644 index 0000000..28e1eea --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Behavioral/NullObject/README.po @@ -0,0 +1,103 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/NullObject/README.rst:2 +msgid "`Null Object`_" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:7 +msgid "" +"NullObject is not a GoF design pattern but a schema which appears frequently" +" enough to be considered a pattern. It has the following benefits:" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:11 +msgid "Client code is simplified" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:12 +msgid "Reduces the chance of null pointer exceptions" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:13 +msgid "Fewer conditionals require less test cases" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:15 +msgid "" +"Methods that return an object or null should instead return an object or " +"``NullObject``. ``NullObject``\\ s simplify boilerplate code such as ``if " +"(!is_null($obj)) { $obj->callSomething(); }`` to just " +"``$obj->callSomething();`` by eliminating the conditional check in client " +"code." +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:22 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:24 +msgid "Symfony2: null logger of profiler" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:25 +msgid "Symfony2: null output in Symfony/Console" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:26 +msgid "null handler in a Chain of Responsibilities pattern" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:27 +msgid "null command in a Command pattern" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:30 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:37 +msgid "Code" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:39 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:41 +msgid "Service.php" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:47 +msgid "LoggerInterface.php" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:53 +msgid "PrintLogger.php" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:59 +msgid "NullLogger.php" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:66 +msgid "Test" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:68 +msgid "Tests/LoggerTest.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Behavioral/Observer/README.po b/locale/pt_BR/LC_MESSAGES/Behavioral/Observer/README.po new file mode 100644 index 0000000..84dd8a9 --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Behavioral/Observer/README.po @@ -0,0 +1,75 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Observer/README.rst:2 +msgid "`Observer`_" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:7 +msgid "" +"To implement a publish/subscribe behaviour to an object, whenever a " +"\"Subject\" object changes it's state, the attached \"Observers\" will be " +"notified. It is used to shorten the amount of coupled objects and uses loose" +" coupling instead." +msgstr "" + +#: ../../Behavioral/Observer/README.rst:13 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:15 +msgid "" +"a message queue system is observed to show the progress of a job in a GUI" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:19 +msgid "Note" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:21 +msgid "" +"PHP already defines two interfaces that can help to implement this pattern: " +"SplObserver and SplSubject." +msgstr "" + +#: ../../Behavioral/Observer/README.rst:25 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:32 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:34 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:36 +msgid "User.php" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:42 +msgid "UserObserver.php" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:49 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:51 +msgid "Tests/ObserverTest.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Behavioral/README.po b/locale/pt_BR/LC_MESSAGES/Behavioral/README.po new file mode 100644 index 0000000..d773162 --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Behavioral/README.po @@ -0,0 +1,24 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/README.rst:2 +msgid "Behavioral" +msgstr "" + +#: ../../Behavioral/README.rst:4 +msgid "" +"In software engineering, behavioral design patterns are design patterns that" +" identify common communication patterns between objects and realize these " +"patterns. By doing so, these patterns increase flexibility in carrying out " +"this communication." +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Behavioral/Specification/README.po b/locale/pt_BR/LC_MESSAGES/Behavioral/Specification/README.po new file mode 100644 index 0000000..79bcea6 --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Behavioral/Specification/README.po @@ -0,0 +1,84 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Specification/README.rst:2 +msgid "`Specification`_" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:7 +msgid "" +"Builds a clear specification of business rules, where objects can be checked" +" against. The composite specification class has one method called " +"``isSatisfiedBy`` that returns either true or false depending on whether the" +" given object satisfies the specification." +msgstr "" + +#: ../../Behavioral/Specification/README.rst:13 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:15 +msgid "`RulerZ `__" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:18 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:25 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:27 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:29 +msgid "Item.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:35 +msgid "SpecificationInterface.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:41 +msgid "AbstractSpecification.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:47 +msgid "Either.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:53 +msgid "PriceSpecification.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:59 +msgid "Plus.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:65 +msgid "Not.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:72 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:74 +msgid "Tests/SpecificationTest.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Behavioral/State/README.po b/locale/pt_BR/LC_MESSAGES/Behavioral/State/README.po new file mode 100644 index 0000000..a6ed567 --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Behavioral/State/README.po @@ -0,0 +1,63 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/State/README.rst:2 +msgid "`State`_" +msgstr "" + +#: ../../Behavioral/State/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/State/README.rst:7 +msgid "" +"Encapsulate varying behavior for the same routine based on an object's " +"state. This can be a cleaner way for an object to change its behavior at " +"runtime without resorting to large monolithic conditional statements." +msgstr "" + +#: ../../Behavioral/State/README.rst:12 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/State/README.rst:19 +msgid "Code" +msgstr "" + +#: ../../Behavioral/State/README.rst:21 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/State/README.rst:23 +msgid "OrderController.php" +msgstr "" + +#: ../../Behavioral/State/README.rst:29 +msgid "OrderFactory.php" +msgstr "" + +#: ../../Behavioral/State/README.rst:35 +msgid "OrderInterface.php" +msgstr "" + +#: ../../Behavioral/State/README.rst:41 +msgid "ShippingOrder.php" +msgstr "" + +#: ../../Behavioral/State/README.rst:47 +msgid "CreateOrder.php" +msgstr "" + +#: ../../Behavioral/State/README.rst:54 +msgid "Test" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Behavioral/Strategy/README.po b/locale/pt_BR/LC_MESSAGES/Behavioral/Strategy/README.po new file mode 100644 index 0000000..83278ed --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Behavioral/Strategy/README.po @@ -0,0 +1,92 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Strategy/README.rst:2 +msgid "`Strategy`_" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:5 +msgid "Terminology:" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:7 +msgid "Context" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:8 +msgid "Strategy" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:9 +msgid "Concrete Strategy" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:12 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:14 +msgid "" +"To separate strategies and to enable fast switching between them. Also this " +"pattern is a good alternative to inheritance (instead of having an abstract " +"class that is extended)." +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:19 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:21 +msgid "sorting a list of objects, one strategy by date, the other by id" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:22 +msgid "" +"simplify unit testing: e.g. switching between file and in-memory storage" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:26 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:33 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:35 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:37 +msgid "ObjectCollection.php" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:43 +msgid "ComparatorInterface.php" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:49 +msgid "DateComparator.php" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:55 +msgid "IdComparator.php" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:62 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:64 +msgid "Tests/StrategyTest.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Behavioral/TemplateMethod/README.po b/locale/pt_BR/LC_MESSAGES/Behavioral/TemplateMethod/README.po new file mode 100644 index 0000000..4fea331 --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Behavioral/TemplateMethod/README.po @@ -0,0 +1,83 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/TemplateMethod/README.rst:2 +msgid "`Template Method`_" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:7 +msgid "Template Method is a behavioral design pattern." +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:9 +msgid "" +"Perhaps you have encountered it many times already. The idea is to let " +"subclasses of this abstract template \"finish\" the behavior of an " +"algorithm." +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:13 +msgid "" +"A.k.a the \"Hollywood principle\": \"Don't call us, we call you.\" This " +"class is not called by subclasses but the inverse. How? With abstraction of " +"course." +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:17 +msgid "" +"In other words, this is a skeleton of algorithm, well-suited for framework " +"libraries. The user has just to implement one method and the superclass do " +"the job." +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:21 +msgid "" +"It is an easy way to decouple concrete classes and reduce copy-paste, that's" +" why you'll find it everywhere." +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:25 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:32 +msgid "Code" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:34 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:36 +msgid "Journey.php" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:42 +msgid "BeachJourney.php" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:48 +msgid "CityJourney.php" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:55 +msgid "Test" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:57 +msgid "Tests/JourneyTest.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Behavioral/Visitor/README.po b/locale/pt_BR/LC_MESSAGES/Behavioral/Visitor/README.po new file mode 100644 index 0000000..1664fe3 --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Behavioral/Visitor/README.po @@ -0,0 +1,75 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Visitor/README.rst:2 +msgid "`Visitor`_" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:7 +msgid "" +"The Visitor Pattern lets you outsource operations on objects to other " +"objects. The main reason to do this is to keep a separation of concerns. But" +" classes have to define a contract to allow visitors (the ``Role::accept`` " +"method in the example)." +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:12 +msgid "" +"The contract is an abstract class but you can have also a clean interface. " +"In that case, each Visitor has to choose itself which method to invoke on " +"the visitor." +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:17 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:24 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:26 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:28 +msgid "RoleVisitorInterface.php" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:34 +msgid "RolePrintVisitor.php" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:40 +msgid "Role.php" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:46 +msgid "User.php" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:52 +msgid "Group.php" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:59 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:61 +msgid "Tests/VisitorTest.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Creational/AbstractFactory/README.po b/locale/pt_BR/LC_MESSAGES/Creational/AbstractFactory/README.po new file mode 100644 index 0000000..6213f0e --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Creational/AbstractFactory/README.po @@ -0,0 +1,88 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/AbstractFactory/README.rst:2 +msgid "`Abstract Factory`_" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:7 +msgid "" +"To create series of related or dependent objects without specifying their " +"concrete classes. Usually the created classes all implement the same " +"interface. The client of the abstract factory does not care about how these " +"objects are created, he just knows how they go together." +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:13 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:20 +msgid "Code" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:22 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:24 +msgid "AbstractFactory.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:30 +msgid "JsonFactory.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:36 +msgid "HtmlFactory.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:42 +msgid "MediaInterface.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:48 +msgid "Picture.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:54 +msgid "Text.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:60 +msgid "Json/Picture.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:66 +msgid "Json/Text.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:72 +msgid "Html/Picture.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:78 +msgid "Html/Text.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:85 +msgid "Test" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:87 +msgid "Tests/AbstractFactoryTest.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Creational/Builder/README.po b/locale/pt_BR/LC_MESSAGES/Creational/Builder/README.po new file mode 100644 index 0000000..dfb357a --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Creational/Builder/README.po @@ -0,0 +1,110 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/Builder/README.rst:2 +msgid "`Builder`_" +msgstr "" + +#: ../../Creational/Builder/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/Builder/README.rst:7 +msgid "Builder is an interface that build parts of a complex object." +msgstr "" + +#: ../../Creational/Builder/README.rst:9 +msgid "" +"Sometimes, if the builder has a better knowledge of what it builds, this " +"interface could be an abstract class with default methods (aka adapter)." +msgstr "" + +#: ../../Creational/Builder/README.rst:12 +msgid "" +"If you have a complex inheritance tree for objects, it is logical to have a " +"complex inheritance tree for builders too." +msgstr "" + +#: ../../Creational/Builder/README.rst:15 +msgid "" +"Note: Builders have often a fluent interface, see the mock builder of " +"PHPUnit for example." +msgstr "" + +#: ../../Creational/Builder/README.rst:19 +msgid "Examples" +msgstr "" + +#: ../../Creational/Builder/README.rst:21 +msgid "PHPUnit: Mock Builder" +msgstr "" + +#: ../../Creational/Builder/README.rst:24 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/Builder/README.rst:31 +msgid "Code" +msgstr "" + +#: ../../Creational/Builder/README.rst:33 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/Builder/README.rst:35 +msgid "Director.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:41 +msgid "BuilderInterface.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:47 +msgid "BikeBuilder.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:53 +msgid "CarBuilder.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:59 +msgid "Parts/Vehicle.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:65 +msgid "Parts/Bike.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:71 +msgid "Parts/Car.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:77 +msgid "Parts/Engine.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:83 +msgid "Parts/Wheel.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:89 +msgid "Parts/Door.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:96 +msgid "Test" +msgstr "" + +#: ../../Creational/Builder/README.rst:98 +msgid "Tests/DirectorTest.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Creational/FactoryMethod/README.po b/locale/pt_BR/LC_MESSAGES/Creational/FactoryMethod/README.po new file mode 100644 index 0000000..29fd708 --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Creational/FactoryMethod/README.po @@ -0,0 +1,90 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/FactoryMethod/README.rst:2 +msgid "`Factory Method`_" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:7 +msgid "" +"The good point over the SimpleFactory is you can subclass it to implement " +"different ways to create objects" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:10 +msgid "For simple case, this abstract class could be just an interface" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:12 +msgid "" +"This pattern is a \"real\" Design Pattern because it achieves the " +"\"Dependency Inversion Principle\" a.k.a the \"D\" in S.O.L.I.D principles." +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:15 +msgid "" +"It means the FactoryMethod class depends on abstractions, not concrete " +"classes. This is the real trick compared to SimpleFactory or StaticFactory." +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:31 +msgid "FactoryMethod.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:37 +msgid "ItalianFactory.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:43 +msgid "GermanFactory.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:49 +msgid "VehicleInterface.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:55 +msgid "Porsche.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:61 +msgid "Bicycle.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:67 +msgid "Ferrari.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:74 +msgid "Test" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:76 +msgid "Tests/FactoryMethodTest.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Creational/Multiton/README.po b/locale/pt_BR/LC_MESSAGES/Creational/Multiton/README.po new file mode 100644 index 0000000..0990e3c --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Creational/Multiton/README.po @@ -0,0 +1,64 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/Multiton/README.rst:2 +msgid "Multiton" +msgstr "" + +#: ../../Creational/Multiton/README.rst:4 +msgid "" +"**THIS IS CONSIDERED TO BE AN ANTI-PATTERN! FOR BETTER TESTABILITY AND " +"MAINTAINABILITY USE DEPENDENCY INJECTION!**" +msgstr "" + +#: ../../Creational/Multiton/README.rst:8 +msgid "Purpose" +msgstr "" + +#: ../../Creational/Multiton/README.rst:10 +msgid "" +"To have only a list of named instances that are used, like a singleton but " +"with n instances." +msgstr "" + +#: ../../Creational/Multiton/README.rst:14 +msgid "Examples" +msgstr "" + +#: ../../Creational/Multiton/README.rst:16 +msgid "2 DB Connectors, e.g. one for MySQL, the other for SQLite" +msgstr "" + +#: ../../Creational/Multiton/README.rst:17 +msgid "multiple Loggers (one for debug messages, one for errors)" +msgstr "" + +#: ../../Creational/Multiton/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/Multiton/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Creational/Multiton/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/Multiton/README.rst:31 +msgid "Multiton.php" +msgstr "" + +#: ../../Creational/Multiton/README.rst:38 +msgid "Test" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Creational/Pool/README.po b/locale/pt_BR/LC_MESSAGES/Creational/Pool/README.po new file mode 100644 index 0000000..6d829be --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Creational/Pool/README.po @@ -0,0 +1,81 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/Pool/README.rst:2 +msgid "`Pool`_" +msgstr "" + +#: ../../Creational/Pool/README.rst:4 +msgid "" +"The **object pool pattern** is a software creational design pattern that " +"uses a set of initialized objects kept ready to use – a \"pool\" – rather " +"than allocating and destroying them on demand. A client of the pool will " +"request an object from the pool and perform operations on the returned " +"object. When the client has finished, it returns the object, which is a " +"specific type of factory object, to the pool rather than destroying it." +msgstr "" + +#: ../../Creational/Pool/README.rst:11 +msgid "" +"Object pooling can offer a significant performance boost in situations where" +" the cost of initializing a class instance is high, the rate of " +"instantiation of a class is high, and the number of instances in use at any " +"one time is low. The pooled object is obtained in predictable time when " +"creation of the new objects (especially over network) may take variable " +"time." +msgstr "" + +#: ../../Creational/Pool/README.rst:18 +msgid "" +"However these benefits are mostly true for objects that are expensive with " +"respect to time, such as database connections, socket connections, threads " +"and large graphic objects like fonts or bitmaps. In certain situations, " +"simple object pooling (that hold no external resources, but only occupy " +"memory) may not be efficient and could decrease performance." +msgstr "" + +#: ../../Creational/Pool/README.rst:25 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/Pool/README.rst:32 +msgid "Code" +msgstr "" + +#: ../../Creational/Pool/README.rst:34 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/Pool/README.rst:36 +msgid "Pool.php" +msgstr "" + +#: ../../Creational/Pool/README.rst:42 +msgid "Processor.php" +msgstr "" + +#: ../../Creational/Pool/README.rst:48 +msgid "Worker.php" +msgstr "" + +#: ../../Creational/Pool/README.rst:55 +msgid "Test" +msgstr "" + +#: ../../Creational/Pool/README.rst:57 +msgid "Tests/PoolTest.php" +msgstr "" + +#: ../../Creational/Pool/README.rst:63 +msgid "Tests/TestWorker.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Creational/Prototype/README.po b/locale/pt_BR/LC_MESSAGES/Creational/Prototype/README.po new file mode 100644 index 0000000..6cdc786 --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Creational/Prototype/README.po @@ -0,0 +1,68 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/Prototype/README.rst:2 +msgid "`Prototype`_" +msgstr "" + +#: ../../Creational/Prototype/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/Prototype/README.rst:7 +msgid "" +"To avoid the cost of creating objects the standard way (new Foo()) and " +"instead create a prototype and clone it." +msgstr "" + +#: ../../Creational/Prototype/README.rst:11 +msgid "Examples" +msgstr "" + +#: ../../Creational/Prototype/README.rst:13 +msgid "" +"Large amounts of data (e.g. create 1,000,000 rows in a database at once via " +"a ORM)." +msgstr "" + +#: ../../Creational/Prototype/README.rst:17 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/Prototype/README.rst:24 +msgid "Code" +msgstr "" + +#: ../../Creational/Prototype/README.rst:26 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/Prototype/README.rst:28 +msgid "index.php" +msgstr "" + +#: ../../Creational/Prototype/README.rst:34 +msgid "BookPrototype.php" +msgstr "" + +#: ../../Creational/Prototype/README.rst:40 +msgid "BarBookPrototype.php" +msgstr "" + +#: ../../Creational/Prototype/README.rst:46 +msgid "FooBookPrototype.php" +msgstr "" + +#: ../../Creational/Prototype/README.rst:53 +msgid "Test" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Creational/README.po b/locale/pt_BR/LC_MESSAGES/Creational/README.po new file mode 100644 index 0000000..4d9d72d --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Creational/README.po @@ -0,0 +1,25 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/README.rst:2 +msgid "Creational" +msgstr "" + +#: ../../Creational/README.rst:4 +msgid "" +"In software engineering, creational design patterns are design patterns that" +" deal with object creation mechanisms, trying to create objects in a manner " +"suitable to the situation. The basic form of object creation could result in" +" design problems or added complexity to the design. Creational design " +"patterns solve this problem by somehow controlling this object creation." +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Creational/SimpleFactory/README.po b/locale/pt_BR/LC_MESSAGES/Creational/SimpleFactory/README.po new file mode 100644 index 0000000..a36955e --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Creational/SimpleFactory/README.po @@ -0,0 +1,72 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/SimpleFactory/README.rst:2 +msgid "Simple Factory" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:7 +msgid "ConcreteFactory is a simple factory pattern." +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:9 +msgid "" +"It differs from the static factory because it is NOT static and as you know:" +" static => global => evil!" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:12 +msgid "" +"Therefore, you can have multiple factories, differently parametrized, you " +"can subclass it and you can mock-up it." +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:16 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:23 +msgid "Code" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:25 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:27 +msgid "ConcreteFactory.php" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:33 +msgid "VehicleInterface.php" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:39 +msgid "Bicycle.php" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:45 +msgid "Scooter.php" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:52 +msgid "Test" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:54 +msgid "Tests/SimpleFactoryTest.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Creational/Singleton/README.po b/locale/pt_BR/LC_MESSAGES/Creational/Singleton/README.po new file mode 100644 index 0000000..4911734 --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Creational/Singleton/README.po @@ -0,0 +1,75 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/Singleton/README.rst:2 +msgid "`Singleton`_" +msgstr "" + +#: ../../Creational/Singleton/README.rst:4 +msgid "" +"**THIS IS CONSIDERED TO BE AN ANTI-PATTERN! FOR BETTER TESTABILITY AND " +"MAINTAINABILITY USE DEPENDENCY INJECTION!**" +msgstr "" + +#: ../../Creational/Singleton/README.rst:8 +msgid "Purpose" +msgstr "" + +#: ../../Creational/Singleton/README.rst:10 +msgid "" +"To have only one instance of this object in the application that will handle" +" all calls." +msgstr "" + +#: ../../Creational/Singleton/README.rst:14 +msgid "Examples" +msgstr "" + +#: ../../Creational/Singleton/README.rst:16 +msgid "DB Connector" +msgstr "" + +#: ../../Creational/Singleton/README.rst:17 +msgid "" +"Logger (may also be a Multiton if there are many log files for several " +"purposes)" +msgstr "" + +#: ../../Creational/Singleton/README.rst:19 +msgid "" +"Lock file for the application (there is only one in the filesystem ...)" +msgstr "" + +#: ../../Creational/Singleton/README.rst:23 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/Singleton/README.rst:30 +msgid "Code" +msgstr "" + +#: ../../Creational/Singleton/README.rst:32 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/Singleton/README.rst:34 +msgid "Singleton.php" +msgstr "" + +#: ../../Creational/Singleton/README.rst:41 +msgid "Test" +msgstr "" + +#: ../../Creational/Singleton/README.rst:43 +msgid "Tests/SingletonTest.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Creational/StaticFactory/README.po b/locale/pt_BR/LC_MESSAGES/Creational/StaticFactory/README.po new file mode 100644 index 0000000..3e84e15 --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Creational/StaticFactory/README.po @@ -0,0 +1,75 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/StaticFactory/README.rst:2 +msgid "Static Factory" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:7 +msgid "" +"Similar to the AbstractFactory, this pattern is used to create series of " +"related or dependent objects. The difference between this and the abstract " +"factory pattern is that the static factory pattern uses just one static " +"method to create all types of objects it can create. It is usually named " +"``factory`` or ``build``." +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:14 +msgid "Examples" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:16 +msgid "" +"Zend Framework: ``Zend_Cache_Backend`` or ``_Frontend`` use a factory method" +" create cache backends or frontends" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:31 +msgid "StaticFactory.php" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:37 +msgid "FormatterInterface.php" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:43 +msgid "FormatString.php" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:49 +msgid "FormatNumber.php" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:56 +msgid "Test" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:58 +msgid "Tests/StaticFactoryTest.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/More/Delegation/README.po b/locale/pt_BR/LC_MESSAGES/More/Delegation/README.po new file mode 100644 index 0000000..ff40269 --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/More/Delegation/README.po @@ -0,0 +1,60 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../More/Delegation/README.rst:2 +msgid "`Delegation`_" +msgstr "" + +#: ../../More/Delegation/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../More/Delegation/README.rst:7 ../../More/Delegation/README.rst:12 +msgid "..." +msgstr "" + +#: ../../More/Delegation/README.rst:10 +msgid "Examples" +msgstr "" + +#: ../../More/Delegation/README.rst:15 +msgid "UML Diagram" +msgstr "" + +#: ../../More/Delegation/README.rst:22 +msgid "Code" +msgstr "" + +#: ../../More/Delegation/README.rst:24 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../More/Delegation/README.rst:26 +msgid "Usage.php" +msgstr "" + +#: ../../More/Delegation/README.rst:32 +msgid "TeamLead.php" +msgstr "" + +#: ../../More/Delegation/README.rst:38 +msgid "JuniorDeveloper.php" +msgstr "" + +#: ../../More/Delegation/README.rst:45 +msgid "Test" +msgstr "" + +#: ../../More/Delegation/README.rst:47 +msgid "Tests/DelegationTest.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/More/README.po b/locale/pt_BR/LC_MESSAGES/More/README.po new file mode 100644 index 0000000..c4c30fe --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/More/README.po @@ -0,0 +1,16 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../More/README.rst:2 +msgid "More" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/More/Repository/README.po b/locale/pt_BR/LC_MESSAGES/More/Repository/README.po new file mode 100644 index 0000000..4849f4f --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/More/Repository/README.po @@ -0,0 +1,76 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../More/Repository/README.rst:2 +msgid "Repository" +msgstr "" + +#: ../../More/Repository/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../More/Repository/README.rst:7 +msgid "" +"Mediates between the domain and data mapping layers using a collection-like " +"interface for accessing domain objects. Repository encapsulates the set of " +"objects persisted in a data store and the operations performed over them, " +"providing a more object-oriented view of the persistence layer. Repository " +"also supports the objective of achieving a clean separation and one-way " +"dependency between the domain and data mapping layers." +msgstr "" + +#: ../../More/Repository/README.rst:16 +msgid "Examples" +msgstr "" + +#: ../../More/Repository/README.rst:18 +msgid "" +"Doctrine 2 ORM: there is Repository that mediates between Entity and DBAL " +"and contains methods to retrieve objects" +msgstr "" + +#: ../../More/Repository/README.rst:20 +msgid "Laravel Framework" +msgstr "" + +#: ../../More/Repository/README.rst:23 +msgid "UML Diagram" +msgstr "" + +#: ../../More/Repository/README.rst:30 +msgid "Code" +msgstr "" + +#: ../../More/Repository/README.rst:32 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../More/Repository/README.rst:34 +msgid "Post.php" +msgstr "" + +#: ../../More/Repository/README.rst:40 +msgid "PostRepository.php" +msgstr "" + +#: ../../More/Repository/README.rst:46 +msgid "Storage.php" +msgstr "" + +#: ../../More/Repository/README.rst:52 +msgid "MemoryStorage.php" +msgstr "" + +#: ../../More/Repository/README.rst:59 +msgid "Test" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/More/ServiceLocator/README.po b/locale/pt_BR/LC_MESSAGES/More/ServiceLocator/README.po new file mode 100644 index 0000000..8f3537e --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/More/ServiceLocator/README.po @@ -0,0 +1,94 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../More/ServiceLocator/README.rst:2 +msgid "`Service Locator`_" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:7 +msgid "" +"To implement a loosely coupled architecture in order to get better testable," +" maintainable and extendable code. DI pattern and Service Locator pattern " +"are an implementation of the Inverse of Control pattern." +msgstr "" + +#: ../../More/ServiceLocator/README.rst:12 +msgid "Usage" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:14 +msgid "" +"With ``ServiceLocator`` you can register a service for a given interface. By" +" using the interface you can retrieve the service and use it in the classes " +"of the application without knowing its implementation. You can configure and" +" inject the Service Locator object on bootstrap." +msgstr "" + +#: ../../More/ServiceLocator/README.rst:20 +msgid "Examples" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:22 +msgid "" +"Zend Framework 2 uses Service Locator to create and share services used in " +"the framework(i.e. EventManager, ModuleManager, all custom user services " +"provided by modules, etc...)" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:27 +msgid "UML Diagram" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:34 +msgid "Code" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:36 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:38 +msgid "ServiceLocatorInterface.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:44 +msgid "ServiceLocator.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:50 +msgid "LogServiceInterface.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:56 +msgid "LogService.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:62 +msgid "DatabaseServiceInterface.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:68 +msgid "DatabaseService.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:75 +msgid "Test" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:77 +msgid "Tests/ServiceLocatorTest.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/README.po b/locale/pt_BR/LC_MESSAGES/README.po new file mode 100644 index 0000000..84e21de --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/README.po @@ -0,0 +1,93 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../README.rst:5 +msgid "DesignPatternsPHP" +msgstr "" + +#: ../../README.rst:11 +msgid "" +"This is a collection of known `design patterns`_ and some sample code how to" +" implement them in PHP. Every pattern has a small list of examples (most of " +"them from Zend Framework, Symfony2 or Doctrine2 as I'm most familiar with " +"this software)." +msgstr "" + +#: ../../README.rst:16 +msgid "" +"I think the problem with patterns is that often people do know them but " +"don't know when to apply which." +msgstr "" + +#: ../../README.rst:20 +msgid "Patterns" +msgstr "" + +#: ../../README.rst:22 +msgid "" +"The patterns can be structured in roughly three different categories. Please" +" click on **the title of every pattern's page** for a full explanation of " +"the pattern on Wikipedia." +msgstr "" + +#: ../../README.rst:35 +msgid "Contribute" +msgstr "" + +#: ../../README.rst:37 +msgid "" +"Please feel free to fork and extend existing or add your own examples and " +"send a pull request with your changes! To establish a consistent code " +"quality, please check your code using `PHP CodeSniffer`_ against `PSR2 " +"standard`_ using ``./vendor/bin/phpcs -p --standard=PSR2 --ignore=vendor " +".``." +msgstr "" + +#: ../../README.rst:44 +msgid "License" +msgstr "" + +#: ../../README.rst:46 +msgid "(The MIT License)" +msgstr "" + +#: ../../README.rst:48 +msgid "Copyright (c) 2014 `Dominik Liebler`_ and `contributors`_" +msgstr "" + +#: ../../README.rst:50 +msgid "" +"Permission is hereby granted, free of charge, to any person obtaining a copy" +" of this software and associated documentation files (the 'Software'), to " +"deal in the Software without restriction, including without limitation the " +"rights to use, copy, modify, merge, publish, distribute, sublicense, and/or " +"sell copies of the Software, and to permit persons to whom the Software is " +"furnished to do so, subject to the following conditions:" +msgstr "" + +#: ../../README.rst:58 +msgid "" +"The above copyright notice and this permission notice shall be included in " +"all copies or substantial portions of the Software." +msgstr "" + +#: ../../README.rst:61 +msgid "" +"THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR " +"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, " +"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE " +"AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER " +"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING " +"FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS" +" IN THE SOFTWARE." +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Structural/Adapter/README.po b/locale/pt_BR/LC_MESSAGES/Structural/Adapter/README.po new file mode 100644 index 0000000..420b400 --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Structural/Adapter/README.po @@ -0,0 +1,82 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Adapter/README.rst:2 +msgid "`Adapter / Wrapper`_" +msgstr "" + +#: ../../Structural/Adapter/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Adapter/README.rst:7 +msgid "" +"To translate one interface for a class into a compatible interface. An " +"adapter allows classes to work together that normally could not because of " +"incompatible interfaces by providing it's interface to clients while using " +"the original interface." +msgstr "" + +#: ../../Structural/Adapter/README.rst:13 +msgid "Examples" +msgstr "" + +#: ../../Structural/Adapter/README.rst:15 +msgid "DB Client libraries adapter" +msgstr "" + +#: ../../Structural/Adapter/README.rst:16 +msgid "" +"using multiple different webservices and adapters normalize data so that the" +" outcome is the same for all" +msgstr "" + +#: ../../Structural/Adapter/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Adapter/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Structural/Adapter/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Adapter/README.rst:31 +msgid "PaperBookInterface.php" +msgstr "" + +#: ../../Structural/Adapter/README.rst:37 +msgid "Book.php" +msgstr "" + +#: ../../Structural/Adapter/README.rst:43 +msgid "EBookAdapter.php" +msgstr "" + +#: ../../Structural/Adapter/README.rst:49 +msgid "EBookInterface.php" +msgstr "" + +#: ../../Structural/Adapter/README.rst:55 +msgid "Kindle.php" +msgstr "" + +#: ../../Structural/Adapter/README.rst:62 +msgid "Test" +msgstr "" + +#: ../../Structural/Adapter/README.rst:64 +msgid "Tests/AdapterTest.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Structural/Bridge/README.po b/locale/pt_BR/LC_MESSAGES/Structural/Bridge/README.po new file mode 100644 index 0000000..6e9ae00 --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Structural/Bridge/README.po @@ -0,0 +1,78 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Bridge/README.rst:2 +msgid "`Bridge`_" +msgstr "" + +#: ../../Structural/Bridge/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Bridge/README.rst:7 +msgid "" +"Decouple an abstraction from its implementation so that the two can vary " +"independently. (http://en.wikipedia.org/wiki/Bridge\\_pattern)" +msgstr "" + +#: ../../Structural/Bridge/README.rst:11 +msgid "Sample:" +msgstr "" + +#: ../../Structural/Bridge/README.rst:13 +msgid "`Symfony DoctrineBridge `__" +msgstr "" + +#: ../../Structural/Bridge/README.rst:17 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Bridge/README.rst:24 +msgid "Code" +msgstr "" + +#: ../../Structural/Bridge/README.rst:26 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Bridge/README.rst:28 +msgid "Workshop.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:34 +msgid "Assemble.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:40 +msgid "Produce.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:46 +msgid "Vehicle.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:52 +msgid "Motorcycle.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:58 +msgid "Car.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:65 +msgid "Test" +msgstr "" + +#: ../../Structural/Bridge/README.rst:67 +msgid "Tests/BridgeTest.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Structural/Composite/README.po b/locale/pt_BR/LC_MESSAGES/Structural/Composite/README.po new file mode 100644 index 0000000..ce6ce1a --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Structural/Composite/README.po @@ -0,0 +1,78 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Composite/README.rst:2 +msgid "`Composite`_" +msgstr "" + +#: ../../Structural/Composite/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Composite/README.rst:7 +msgid "" +"To treat a group of objects the same way as a single instance of the object." +msgstr "" + +#: ../../Structural/Composite/README.rst:11 +msgid "Examples" +msgstr "" + +#: ../../Structural/Composite/README.rst:13 +msgid "" +"a form class instance handles all its form elements like a single instance " +"of the form, when ``render()`` is called, it subsequently runs through all " +"its child elements and calls ``render()`` on them" +msgstr "" + +#: ../../Structural/Composite/README.rst:16 +msgid "" +"``Zend_Config``: a tree of configuration options, each one is a " +"``Zend_Config`` object itself" +msgstr "" + +#: ../../Structural/Composite/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Composite/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Structural/Composite/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Composite/README.rst:31 +msgid "FormElement.php" +msgstr "" + +#: ../../Structural/Composite/README.rst:37 +msgid "Form.php" +msgstr "" + +#: ../../Structural/Composite/README.rst:43 +msgid "InputElement.php" +msgstr "" + +#: ../../Structural/Composite/README.rst:49 +msgid "TextElement.php" +msgstr "" + +#: ../../Structural/Composite/README.rst:56 +msgid "Test" +msgstr "" + +#: ../../Structural/Composite/README.rst:58 +msgid "Tests/CompositeTest.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Structural/DataMapper/README.po b/locale/pt_BR/LC_MESSAGES/Structural/DataMapper/README.po new file mode 100644 index 0000000..28b8d4a --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Structural/DataMapper/README.po @@ -0,0 +1,77 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/DataMapper/README.rst:2 +msgid "`Data Mapper`_" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:7 +msgid "" +"A Data Mapper, is a Data Access Layer that performs bidirectional transfer " +"of data between a persistent data store (often a relational database) and an" +" in memory data representation (the domain layer). The goal of the pattern " +"is to keep the in memory representation and the persistent data store " +"independent of each other and the data mapper itself. The layer is composed " +"of one or more mappers (or Data Access Objects), performing the data " +"transfer. Mapper implementations vary in scope. Generic mappers will handle " +"many different domain entity types, dedicated mappers will handle one or a " +"few." +msgstr "" + +#: ../../Structural/DataMapper/README.rst:17 +msgid "" +"The key point of this pattern is, unlike Active Record pattern, the data " +"model follows Single Responsibility Principle." +msgstr "" + +#: ../../Structural/DataMapper/README.rst:21 +msgid "Examples" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:23 +msgid "" +"DB Object Relational Mapper (ORM) : Doctrine2 uses DAO named as " +"\"EntityRepository\"" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:27 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:34 +msgid "Code" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:36 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:38 +msgid "User.php" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:44 +msgid "UserMapper.php" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:51 +msgid "Test" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:53 +msgid "Tests/DataMapperTest.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Structural/Decorator/README.po b/locale/pt_BR/LC_MESSAGES/Structural/Decorator/README.po new file mode 100644 index 0000000..b752b90 --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Structural/Decorator/README.po @@ -0,0 +1,78 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Decorator/README.rst:2 +msgid "`Decorator`_" +msgstr "" + +#: ../../Structural/Decorator/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Decorator/README.rst:7 +msgid "To dynamically add new functionality to class instances." +msgstr "" + +#: ../../Structural/Decorator/README.rst:10 +msgid "Examples" +msgstr "" + +#: ../../Structural/Decorator/README.rst:12 +msgid "Zend Framework: decorators for ``Zend_Form_Element`` instances" +msgstr "" + +#: ../../Structural/Decorator/README.rst:13 +msgid "" +"Web Service Layer: Decorators JSON and XML for a REST service (in this case," +" only one of these should be allowed of course)" +msgstr "" + +#: ../../Structural/Decorator/README.rst:17 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Decorator/README.rst:24 +msgid "Code" +msgstr "" + +#: ../../Structural/Decorator/README.rst:26 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Decorator/README.rst:28 +msgid "RendererInterface.php" +msgstr "" + +#: ../../Structural/Decorator/README.rst:34 +msgid "Webservice.php" +msgstr "" + +#: ../../Structural/Decorator/README.rst:40 +msgid "Decorator.php" +msgstr "" + +#: ../../Structural/Decorator/README.rst:46 +msgid "RenderInXml.php" +msgstr "" + +#: ../../Structural/Decorator/README.rst:52 +msgid "RenderInJson.php" +msgstr "" + +#: ../../Structural/Decorator/README.rst:59 +msgid "Test" +msgstr "" + +#: ../../Structural/Decorator/README.rst:61 +msgid "Tests/DecoratorTest.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Structural/DependencyInjection/README.po b/locale/pt_BR/LC_MESSAGES/Structural/DependencyInjection/README.po new file mode 100644 index 0000000..9e6e9fa --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Structural/DependencyInjection/README.po @@ -0,0 +1,107 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/DependencyInjection/README.rst:2 +msgid "`Dependency Injection`_" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:7 +msgid "" +"To implement a loosely coupled architecture in order to get better testable," +" maintainable and extendable code." +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:11 +msgid "Usage" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:13 +msgid "" +"Configuration gets injected and ``Connection`` will get all that it needs " +"from ``$config``. Without DI, the configuration would be created directly in" +" ``Connection``, which is not very good for testing and extending " +"``Connection``." +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:18 +msgid "" +"Notice we are following Inversion of control principle in ``Connection`` by " +"asking ``$config`` to implement ``Parameters`` interface. This decouples our" +" components. We don't care where the source of information comes from, we " +"only care that ``$config`` has certain methods to retrieve that information." +" Read more about Inversion of control `here " +"`__." +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:26 +msgid "Examples" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:28 +msgid "" +"The Doctrine2 ORM uses dependency injection e.g. for configuration that is " +"injected into a ``Connection`` object. For testing purposes, one can easily " +"create a mock object of the configuration and inject that into the " +"``Connection`` object" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:32 +msgid "" +"Symfony and Zend Framework 2 already have containers for DI that create " +"objects via a configuration array and inject them where needed (i.e. in " +"Controllers)" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:37 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:44 +msgid "Code" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:46 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:48 +msgid "AbstractConfig.php" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:54 +msgid "Parameters.php" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:60 +msgid "ArrayConfig.php" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:66 +msgid "Connection.php" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:73 +msgid "Test" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:75 +msgid "Tests/DependencyInjectionTest.php" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:81 +msgid "Tests/config.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Structural/Facade/README.po b/locale/pt_BR/LC_MESSAGES/Structural/Facade/README.po new file mode 100644 index 0000000..8f8fd9b --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Structural/Facade/README.po @@ -0,0 +1,87 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Facade/README.rst:2 +msgid "`Facade`_" +msgstr "" + +#: ../../Structural/Facade/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Facade/README.rst:7 +msgid "" +"The primary goal of a Facade Pattern is not to avoid you to read the manual " +"of a complex API. It's only a side-effect. The first goal is to reduce " +"coupling and follow the Law of Demeter." +msgstr "" + +#: ../../Structural/Facade/README.rst:11 +msgid "" +"A Facade is meant to decouple a client and a sub-system by embedding many " +"(but sometimes just one) interface, and of course to reduce complexity." +msgstr "" + +#: ../../Structural/Facade/README.rst:15 +msgid "A facade does not forbid you the access to the sub-system" +msgstr "" + +#: ../../Structural/Facade/README.rst:16 +msgid "You can (you should) have multiple facades for one sub-system" +msgstr "" + +#: ../../Structural/Facade/README.rst:18 +msgid "" +"That's why a good facade has no ``new`` in it. If there are multiple " +"creations for each method, it is not a Facade, it's a Builder or a " +"[Abstract\\|Static\\|Simple] Factory [Method]." +msgstr "" + +#: ../../Structural/Facade/README.rst:22 +msgid "" +"The best facade has no ``new`` and a constructor with interface-type-hinted " +"parameters. If you need creation of new instances, use a Factory as " +"argument." +msgstr "" + +#: ../../Structural/Facade/README.rst:27 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Facade/README.rst:34 +msgid "Code" +msgstr "" + +#: ../../Structural/Facade/README.rst:36 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Facade/README.rst:38 +msgid "Facade.php" +msgstr "" + +#: ../../Structural/Facade/README.rst:44 +msgid "OsInterface.php" +msgstr "" + +#: ../../Structural/Facade/README.rst:50 +msgid "BiosInterface.php" +msgstr "" + +#: ../../Structural/Facade/README.rst:57 +msgid "Test" +msgstr "" + +#: ../../Structural/Facade/README.rst:59 +msgid "Tests/FacadeTest.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Structural/FluentInterface/README.po b/locale/pt_BR/LC_MESSAGES/Structural/FluentInterface/README.po new file mode 100644 index 0000000..a0d1de7 --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Structural/FluentInterface/README.po @@ -0,0 +1,66 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/FluentInterface/README.rst:2 +msgid "`Fluent Interface`_" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:7 +msgid "" +"To write code that is easy readable just like sentences in a natural " +"language (like English)." +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:11 +msgid "Examples" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:13 +msgid "Doctrine2's QueryBuilder works something like that example class below" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:15 +msgid "PHPUnit uses fluent interfaces to build mock objects" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:16 +msgid "Yii Framework: CDbCommand and CActiveRecord use this pattern, too" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:19 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:26 +msgid "Code" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:28 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:30 +msgid "Sql.php" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:37 +msgid "Test" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:39 +msgid "Tests/FluentInterfaceTest.php" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Structural/Proxy/README.po b/locale/pt_BR/LC_MESSAGES/Structural/Proxy/README.po new file mode 100644 index 0000000..3272dfd --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Structural/Proxy/README.po @@ -0,0 +1,59 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Proxy/README.rst:2 +msgid "`Proxy`_" +msgstr "" + +#: ../../Structural/Proxy/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Proxy/README.rst:7 +msgid "To interface to anything that is expensive or impossible to duplicate." +msgstr "" + +#: ../../Structural/Proxy/README.rst:10 +msgid "Examples" +msgstr "" + +#: ../../Structural/Proxy/README.rst:12 +msgid "" +"Doctrine2 uses proxies to implement framework magic (e.g. lazy " +"initialization) in them, while the user still works with his own entity " +"classes and will never use nor touch the proxies" +msgstr "" + +#: ../../Structural/Proxy/README.rst:17 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Proxy/README.rst:24 +msgid "Code" +msgstr "" + +#: ../../Structural/Proxy/README.rst:26 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Proxy/README.rst:28 +msgid "Record.php" +msgstr "" + +#: ../../Structural/Proxy/README.rst:34 +msgid "RecordProxy.php" +msgstr "" + +#: ../../Structural/Proxy/README.rst:41 +msgid "Test" +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Structural/README.po b/locale/pt_BR/LC_MESSAGES/Structural/README.po new file mode 100644 index 0000000..2d2af2d --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Structural/README.po @@ -0,0 +1,23 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/README.rst:2 +msgid "Structural" +msgstr "" + +#: ../../Structural/README.rst:4 +msgid "" +"In Software Engineering, Structural Design Patterns are Design Patterns that" +" ease the design by identifying a simple way to realize relationships " +"between entities." +msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/Structural/Registry/README.po b/locale/pt_BR/LC_MESSAGES/Structural/Registry/README.po new file mode 100644 index 0000000..8cff9f1 --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/Structural/Registry/README.po @@ -0,0 +1,67 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Registry/README.rst:2 +msgid "`Registry`_" +msgstr "" + +#: ../../Structural/Registry/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Registry/README.rst:7 +msgid "" +"To implement a central storage for objects often used throughout the " +"application, is typically implemented using an abstract class with only " +"static methods (or using the Singleton pattern)" +msgstr "" + +#: ../../Structural/Registry/README.rst:12 +msgid "Examples" +msgstr "" + +#: ../../Structural/Registry/README.rst:14 +msgid "" +"Zend Framework: ``Zend_Registry`` holds the application's logger object, " +"front controller etc." +msgstr "" + +#: ../../Structural/Registry/README.rst:16 +msgid "" +"Yii Framework: ``CWebApplication`` holds all the application components, " +"such as ``CWebUser``, ``CUrlManager``, etc." +msgstr "" + +#: ../../Structural/Registry/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Registry/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Structural/Registry/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Registry/README.rst:31 +msgid "Registry.php" +msgstr "" + +#: ../../Structural/Registry/README.rst:38 +msgid "Test" +msgstr "" + +#: ../../Structural/Registry/README.rst:40 +msgid "Tests/RegistryTest.php" +msgstr "" From d266e1a42b9002ebbe1d515f024751992a525493 Mon Sep 17 00:00:00 2001 From: Faust Date: Fri, 29 May 2015 00:10:57 +0200 Subject: [PATCH 027/127] add Russian translation initial files --- .../ChainOfResponsibilities/README.po | 90 ++++++++++++++ .../LC_MESSAGES/Behavioral/Command/README.po | 99 ++++++++++++++++ .../LC_MESSAGES/Behavioral/Iterator/README.po | 83 +++++++++++++ .../LC_MESSAGES/Behavioral/Mediator/README.po | 78 +++++++++++++ .../LC_MESSAGES/Behavioral/Memento/README.po | 85 ++++++++++++++ .../Behavioral/NullObject/README.po | 103 ++++++++++++++++ .../LC_MESSAGES/Behavioral/Observer/README.po | 75 ++++++++++++ locale/ru/LC_MESSAGES/Behavioral/README.po | 24 ++++ .../Behavioral/Specification/README.po | 84 +++++++++++++ .../ru/LC_MESSAGES/Behavioral/State/README.po | 63 ++++++++++ .../LC_MESSAGES/Behavioral/Strategy/README.po | 92 +++++++++++++++ .../Behavioral/TemplateMethod/README.po | 83 +++++++++++++ .../LC_MESSAGES/Behavioral/Visitor/README.po | 75 ++++++++++++ .../Creational/AbstractFactory/README.po | 88 ++++++++++++++ .../LC_MESSAGES/Creational/Builder/README.po | 110 ++++++++++++++++++ .../Creational/FactoryMethod/README.po | 90 ++++++++++++++ .../LC_MESSAGES/Creational/Multiton/README.po | 64 ++++++++++ .../ru/LC_MESSAGES/Creational/Pool/README.po | 81 +++++++++++++ .../Creational/Prototype/README.po | 68 +++++++++++ locale/ru/LC_MESSAGES/Creational/README.po | 25 ++++ .../Creational/SimpleFactory/README.po | 72 ++++++++++++ .../Creational/Singleton/README.po | 75 ++++++++++++ .../Creational/StaticFactory/README.po | 75 ++++++++++++ .../ru/LC_MESSAGES/More/Delegation/README.po | 60 ++++++++++ locale/ru/LC_MESSAGES/More/README.po | 16 +++ .../ru/LC_MESSAGES/More/Repository/README.po | 76 ++++++++++++ .../LC_MESSAGES/More/ServiceLocator/README.po | 94 +++++++++++++++ locale/ru/LC_MESSAGES/README.po | 93 +++++++++++++++ .../LC_MESSAGES/Structural/Adapter/README.po | 82 +++++++++++++ .../LC_MESSAGES/Structural/Bridge/README.po | 78 +++++++++++++ .../Structural/Composite/README.po | 78 +++++++++++++ .../Structural/DataMapper/README.po | 77 ++++++++++++ .../Structural/Decorator/README.po | 78 +++++++++++++ .../Structural/DependencyInjection/README.po | 107 +++++++++++++++++ .../LC_MESSAGES/Structural/Facade/README.po | 87 ++++++++++++++ .../Structural/FluentInterface/README.po | 66 +++++++++++ .../ru/LC_MESSAGES/Structural/Proxy/README.po | 59 ++++++++++ locale/ru/LC_MESSAGES/Structural/README.po | 23 ++++ .../LC_MESSAGES/Structural/Registry/README.po | 67 +++++++++++ 39 files changed, 2923 insertions(+) create mode 100644 locale/ru/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po create mode 100644 locale/ru/LC_MESSAGES/Behavioral/Command/README.po create mode 100644 locale/ru/LC_MESSAGES/Behavioral/Iterator/README.po create mode 100644 locale/ru/LC_MESSAGES/Behavioral/Mediator/README.po create mode 100644 locale/ru/LC_MESSAGES/Behavioral/Memento/README.po create mode 100644 locale/ru/LC_MESSAGES/Behavioral/NullObject/README.po create mode 100644 locale/ru/LC_MESSAGES/Behavioral/Observer/README.po create mode 100644 locale/ru/LC_MESSAGES/Behavioral/README.po create mode 100644 locale/ru/LC_MESSAGES/Behavioral/Specification/README.po create mode 100644 locale/ru/LC_MESSAGES/Behavioral/State/README.po create mode 100644 locale/ru/LC_MESSAGES/Behavioral/Strategy/README.po create mode 100644 locale/ru/LC_MESSAGES/Behavioral/TemplateMethod/README.po create mode 100644 locale/ru/LC_MESSAGES/Behavioral/Visitor/README.po create mode 100644 locale/ru/LC_MESSAGES/Creational/AbstractFactory/README.po create mode 100644 locale/ru/LC_MESSAGES/Creational/Builder/README.po create mode 100644 locale/ru/LC_MESSAGES/Creational/FactoryMethod/README.po create mode 100644 locale/ru/LC_MESSAGES/Creational/Multiton/README.po create mode 100644 locale/ru/LC_MESSAGES/Creational/Pool/README.po create mode 100644 locale/ru/LC_MESSAGES/Creational/Prototype/README.po create mode 100644 locale/ru/LC_MESSAGES/Creational/README.po create mode 100644 locale/ru/LC_MESSAGES/Creational/SimpleFactory/README.po create mode 100644 locale/ru/LC_MESSAGES/Creational/Singleton/README.po create mode 100644 locale/ru/LC_MESSAGES/Creational/StaticFactory/README.po create mode 100644 locale/ru/LC_MESSAGES/More/Delegation/README.po create mode 100644 locale/ru/LC_MESSAGES/More/README.po create mode 100644 locale/ru/LC_MESSAGES/More/Repository/README.po create mode 100644 locale/ru/LC_MESSAGES/More/ServiceLocator/README.po create mode 100644 locale/ru/LC_MESSAGES/README.po create mode 100644 locale/ru/LC_MESSAGES/Structural/Adapter/README.po create mode 100644 locale/ru/LC_MESSAGES/Structural/Bridge/README.po create mode 100644 locale/ru/LC_MESSAGES/Structural/Composite/README.po create mode 100644 locale/ru/LC_MESSAGES/Structural/DataMapper/README.po create mode 100644 locale/ru/LC_MESSAGES/Structural/Decorator/README.po create mode 100644 locale/ru/LC_MESSAGES/Structural/DependencyInjection/README.po create mode 100644 locale/ru/LC_MESSAGES/Structural/Facade/README.po create mode 100644 locale/ru/LC_MESSAGES/Structural/FluentInterface/README.po create mode 100644 locale/ru/LC_MESSAGES/Structural/Proxy/README.po create mode 100644 locale/ru/LC_MESSAGES/Structural/README.po create mode 100644 locale/ru/LC_MESSAGES/Structural/Registry/README.po diff --git a/locale/ru/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po b/locale/ru/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po new file mode 100644 index 0000000..5441787 --- /dev/null +++ b/locale/ru/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po @@ -0,0 +1,90 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:2 +msgid "`Chain Of Responsibilities`_" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:5 +msgid "Purpose:" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:7 +msgid "" +"To build a chain of objects to handle a call in sequential order. If one " +"object cannot handle a call, it delegates the call to the next in the chain " +"and so forth." +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:12 +msgid "Examples:" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:14 +msgid "" +"logging framework, where each chain element decides autonomously what to do " +"with a log message" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:16 +msgid "a Spam filter" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:17 +msgid "" +"Caching: first object is an instance of e.g. a Memcached Interface, if that " +"\"misses\" it delegates the call to the database interface" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:19 +msgid "" +"Yii Framework: CFilterChain is a chain of controller action filters. the " +"executing point is passed from one filter to the next along the chain, and " +"only if all filters say \"yes\", the action can be invoked at last." +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:25 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:32 +msgid "Code" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:34 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:36 +msgid "Request.php" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:42 +msgid "Handler.php" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:48 +msgid "Responsible/SlowStorage.php" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:54 +msgid "Responsible/FastStorage.php" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:61 +msgid "Test" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:63 +msgid "Tests/ChainTest.php" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Behavioral/Command/README.po b/locale/ru/LC_MESSAGES/Behavioral/Command/README.po new file mode 100644 index 0000000..34ee70f --- /dev/null +++ b/locale/ru/LC_MESSAGES/Behavioral/Command/README.po @@ -0,0 +1,99 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Command/README.rst:2 +msgid "`Command`_" +msgstr "" + +#: ../../Behavioral/Command/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Command/README.rst:7 +msgid "To encapsulate invocation and decoupling." +msgstr "" + +#: ../../Behavioral/Command/README.rst:9 +msgid "" +"We have an Invoker and a Receiver. This pattern uses a \"Command\" to " +"delegate the method call against the Receiver and presents the same method " +"\"execute\". Therefore, the Invoker just knows to call \"execute\" to " +"process the Command of the client. The Receiver is decoupled from the " +"Invoker." +msgstr "" + +#: ../../Behavioral/Command/README.rst:15 +msgid "" +"The second aspect of this pattern is the undo(), which undoes the method " +"execute(). Command can also be aggregated to combine more complex commands " +"with minimum copy-paste and relying on composition over inheritance." +msgstr "" + +#: ../../Behavioral/Command/README.rst:21 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Command/README.rst:23 +msgid "" +"A text editor : all events are Command which can be undone, stacked and " +"saved." +msgstr "" + +#: ../../Behavioral/Command/README.rst:25 +msgid "" +"Symfony2: SF2 Commands that can be run from the CLI are built with just the " +"Command pattern in mind" +msgstr "" + +#: ../../Behavioral/Command/README.rst:27 +msgid "" +"big CLI tools use subcommands to distribute various tasks and pack them in " +"\"modules\", each of these can be implemented with the Command pattern (e.g." +" vagrant)" +msgstr "" + +#: ../../Behavioral/Command/README.rst:32 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Command/README.rst:39 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Command/README.rst:41 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Command/README.rst:43 +msgid "CommandInterface.php" +msgstr "" + +#: ../../Behavioral/Command/README.rst:49 +msgid "HelloCommand.php" +msgstr "" + +#: ../../Behavioral/Command/README.rst:55 +msgid "Receiver.php" +msgstr "" + +#: ../../Behavioral/Command/README.rst:61 +msgid "Invoker.php" +msgstr "" + +#: ../../Behavioral/Command/README.rst:68 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Command/README.rst:70 +msgid "Tests/CommandTest.php" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Behavioral/Iterator/README.po b/locale/ru/LC_MESSAGES/Behavioral/Iterator/README.po new file mode 100644 index 0000000..2a298e9 --- /dev/null +++ b/locale/ru/LC_MESSAGES/Behavioral/Iterator/README.po @@ -0,0 +1,83 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Iterator/README.rst:2 +msgid "`Iterator`_" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:7 +msgid "" +"To make an object iterable and to make it appear like a collection of " +"objects." +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:11 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:13 +msgid "" +"to process a file line by line by just running over all lines (which have an" +" object representation) for a file (which of course is an object, too)" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:18 +msgid "Note" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:20 +msgid "" +"Standard PHP Library (SPL) defines an interface Iterator which is best " +"suited for this! Often you would want to implement the Countable interface " +"too, to allow ``count($object)`` on your iterable object" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:25 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:32 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:34 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:36 +msgid "Book.php" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:42 +msgid "BookList.php" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:48 +msgid "BookListIterator.php" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:54 +msgid "BookListReverseIterator.php" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:61 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:63 +msgid "Tests/IteratorTest.php" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Behavioral/Mediator/README.po b/locale/ru/LC_MESSAGES/Behavioral/Mediator/README.po new file mode 100644 index 0000000..f2e9514 --- /dev/null +++ b/locale/ru/LC_MESSAGES/Behavioral/Mediator/README.po @@ -0,0 +1,78 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Mediator/README.rst:2 +msgid "`Mediator`_" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:7 +msgid "" +"This pattern provides an easy to decouple many components working together. " +"It is a good alternative over Observer IF you have a \"central " +"intelligence\", like a controller (but not in the sense of the MVC)." +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:11 +msgid "" +"All components (called Colleague) are only coupled to the MediatorInterface " +"and it is a good thing because in OOP, one good friend is better than many. " +"This is the key-feature of this pattern." +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:16 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:23 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:25 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:27 +msgid "MediatorInterface.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:33 +msgid "Mediator.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:39 +msgid "Colleague.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:45 +msgid "Subsystem/Client.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:51 +msgid "Subsystem/Database.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:57 +msgid "Subsystem/Server.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:64 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:66 +msgid "Tests/MediatorTest.php" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Behavioral/Memento/README.po b/locale/ru/LC_MESSAGES/Behavioral/Memento/README.po new file mode 100644 index 0000000..9ac83df --- /dev/null +++ b/locale/ru/LC_MESSAGES/Behavioral/Memento/README.po @@ -0,0 +1,85 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Memento/README.rst:2 +msgid "`Memento`_" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:7 +msgid "" +"Provide the ability to restore an object to its previous state (undo via " +"rollback)." +msgstr "" + +#: ../../Behavioral/Memento/README.rst:10 +msgid "" +"The memento pattern is implemented with three objects: the originator, a " +"caretaker and a memento. The originator is some object that has an internal " +"state. The caretaker is going to do something to the originator, but wants " +"to be able to undo the change. The caretaker first asks the originator for a" +" memento object. Then it does whatever operation (or sequence of operations)" +" it was going to do. To roll back to the state before the operations, it " +"returns the memento object to the originator. The memento object itself is " +"an opaque object (one which the caretaker cannot, or should not, change). " +"When using this pattern, care should be taken if the originator may change " +"other objects or resources - the memento pattern operates on a single " +"object." +msgstr "" + +#: ../../Behavioral/Memento/README.rst:23 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:25 +msgid "The seed of a pseudorandom number generator" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:26 +msgid "The state in a finite state machine" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:29 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:36 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:38 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:40 +msgid "Memento.php" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:46 +msgid "Originator.php" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:52 +msgid "Caretaker.php" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:59 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:61 +msgid "Tests/MementoTest.php" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Behavioral/NullObject/README.po b/locale/ru/LC_MESSAGES/Behavioral/NullObject/README.po new file mode 100644 index 0000000..28e1eea --- /dev/null +++ b/locale/ru/LC_MESSAGES/Behavioral/NullObject/README.po @@ -0,0 +1,103 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/NullObject/README.rst:2 +msgid "`Null Object`_" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:7 +msgid "" +"NullObject is not a GoF design pattern but a schema which appears frequently" +" enough to be considered a pattern. It has the following benefits:" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:11 +msgid "Client code is simplified" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:12 +msgid "Reduces the chance of null pointer exceptions" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:13 +msgid "Fewer conditionals require less test cases" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:15 +msgid "" +"Methods that return an object or null should instead return an object or " +"``NullObject``. ``NullObject``\\ s simplify boilerplate code such as ``if " +"(!is_null($obj)) { $obj->callSomething(); }`` to just " +"``$obj->callSomething();`` by eliminating the conditional check in client " +"code." +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:22 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:24 +msgid "Symfony2: null logger of profiler" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:25 +msgid "Symfony2: null output in Symfony/Console" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:26 +msgid "null handler in a Chain of Responsibilities pattern" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:27 +msgid "null command in a Command pattern" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:30 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:37 +msgid "Code" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:39 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:41 +msgid "Service.php" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:47 +msgid "LoggerInterface.php" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:53 +msgid "PrintLogger.php" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:59 +msgid "NullLogger.php" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:66 +msgid "Test" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:68 +msgid "Tests/LoggerTest.php" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Behavioral/Observer/README.po b/locale/ru/LC_MESSAGES/Behavioral/Observer/README.po new file mode 100644 index 0000000..84dd8a9 --- /dev/null +++ b/locale/ru/LC_MESSAGES/Behavioral/Observer/README.po @@ -0,0 +1,75 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Observer/README.rst:2 +msgid "`Observer`_" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:7 +msgid "" +"To implement a publish/subscribe behaviour to an object, whenever a " +"\"Subject\" object changes it's state, the attached \"Observers\" will be " +"notified. It is used to shorten the amount of coupled objects and uses loose" +" coupling instead." +msgstr "" + +#: ../../Behavioral/Observer/README.rst:13 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:15 +msgid "" +"a message queue system is observed to show the progress of a job in a GUI" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:19 +msgid "Note" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:21 +msgid "" +"PHP already defines two interfaces that can help to implement this pattern: " +"SplObserver and SplSubject." +msgstr "" + +#: ../../Behavioral/Observer/README.rst:25 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:32 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:34 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:36 +msgid "User.php" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:42 +msgid "UserObserver.php" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:49 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:51 +msgid "Tests/ObserverTest.php" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Behavioral/README.po b/locale/ru/LC_MESSAGES/Behavioral/README.po new file mode 100644 index 0000000..d773162 --- /dev/null +++ b/locale/ru/LC_MESSAGES/Behavioral/README.po @@ -0,0 +1,24 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/README.rst:2 +msgid "Behavioral" +msgstr "" + +#: ../../Behavioral/README.rst:4 +msgid "" +"In software engineering, behavioral design patterns are design patterns that" +" identify common communication patterns between objects and realize these " +"patterns. By doing so, these patterns increase flexibility in carrying out " +"this communication." +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Behavioral/Specification/README.po b/locale/ru/LC_MESSAGES/Behavioral/Specification/README.po new file mode 100644 index 0000000..79bcea6 --- /dev/null +++ b/locale/ru/LC_MESSAGES/Behavioral/Specification/README.po @@ -0,0 +1,84 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Specification/README.rst:2 +msgid "`Specification`_" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:7 +msgid "" +"Builds a clear specification of business rules, where objects can be checked" +" against. The composite specification class has one method called " +"``isSatisfiedBy`` that returns either true or false depending on whether the" +" given object satisfies the specification." +msgstr "" + +#: ../../Behavioral/Specification/README.rst:13 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:15 +msgid "`RulerZ `__" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:18 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:25 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:27 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:29 +msgid "Item.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:35 +msgid "SpecificationInterface.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:41 +msgid "AbstractSpecification.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:47 +msgid "Either.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:53 +msgid "PriceSpecification.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:59 +msgid "Plus.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:65 +msgid "Not.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:72 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:74 +msgid "Tests/SpecificationTest.php" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Behavioral/State/README.po b/locale/ru/LC_MESSAGES/Behavioral/State/README.po new file mode 100644 index 0000000..a6ed567 --- /dev/null +++ b/locale/ru/LC_MESSAGES/Behavioral/State/README.po @@ -0,0 +1,63 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/State/README.rst:2 +msgid "`State`_" +msgstr "" + +#: ../../Behavioral/State/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/State/README.rst:7 +msgid "" +"Encapsulate varying behavior for the same routine based on an object's " +"state. This can be a cleaner way for an object to change its behavior at " +"runtime without resorting to large monolithic conditional statements." +msgstr "" + +#: ../../Behavioral/State/README.rst:12 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/State/README.rst:19 +msgid "Code" +msgstr "" + +#: ../../Behavioral/State/README.rst:21 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/State/README.rst:23 +msgid "OrderController.php" +msgstr "" + +#: ../../Behavioral/State/README.rst:29 +msgid "OrderFactory.php" +msgstr "" + +#: ../../Behavioral/State/README.rst:35 +msgid "OrderInterface.php" +msgstr "" + +#: ../../Behavioral/State/README.rst:41 +msgid "ShippingOrder.php" +msgstr "" + +#: ../../Behavioral/State/README.rst:47 +msgid "CreateOrder.php" +msgstr "" + +#: ../../Behavioral/State/README.rst:54 +msgid "Test" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Behavioral/Strategy/README.po b/locale/ru/LC_MESSAGES/Behavioral/Strategy/README.po new file mode 100644 index 0000000..83278ed --- /dev/null +++ b/locale/ru/LC_MESSAGES/Behavioral/Strategy/README.po @@ -0,0 +1,92 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Strategy/README.rst:2 +msgid "`Strategy`_" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:5 +msgid "Terminology:" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:7 +msgid "Context" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:8 +msgid "Strategy" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:9 +msgid "Concrete Strategy" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:12 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:14 +msgid "" +"To separate strategies and to enable fast switching between them. Also this " +"pattern is a good alternative to inheritance (instead of having an abstract " +"class that is extended)." +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:19 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:21 +msgid "sorting a list of objects, one strategy by date, the other by id" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:22 +msgid "" +"simplify unit testing: e.g. switching between file and in-memory storage" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:26 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:33 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:35 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:37 +msgid "ObjectCollection.php" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:43 +msgid "ComparatorInterface.php" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:49 +msgid "DateComparator.php" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:55 +msgid "IdComparator.php" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:62 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:64 +msgid "Tests/StrategyTest.php" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Behavioral/TemplateMethod/README.po b/locale/ru/LC_MESSAGES/Behavioral/TemplateMethod/README.po new file mode 100644 index 0000000..4fea331 --- /dev/null +++ b/locale/ru/LC_MESSAGES/Behavioral/TemplateMethod/README.po @@ -0,0 +1,83 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/TemplateMethod/README.rst:2 +msgid "`Template Method`_" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:7 +msgid "Template Method is a behavioral design pattern." +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:9 +msgid "" +"Perhaps you have encountered it many times already. The idea is to let " +"subclasses of this abstract template \"finish\" the behavior of an " +"algorithm." +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:13 +msgid "" +"A.k.a the \"Hollywood principle\": \"Don't call us, we call you.\" This " +"class is not called by subclasses but the inverse. How? With abstraction of " +"course." +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:17 +msgid "" +"In other words, this is a skeleton of algorithm, well-suited for framework " +"libraries. The user has just to implement one method and the superclass do " +"the job." +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:21 +msgid "" +"It is an easy way to decouple concrete classes and reduce copy-paste, that's" +" why you'll find it everywhere." +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:25 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:32 +msgid "Code" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:34 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:36 +msgid "Journey.php" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:42 +msgid "BeachJourney.php" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:48 +msgid "CityJourney.php" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:55 +msgid "Test" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:57 +msgid "Tests/JourneyTest.php" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Behavioral/Visitor/README.po b/locale/ru/LC_MESSAGES/Behavioral/Visitor/README.po new file mode 100644 index 0000000..1664fe3 --- /dev/null +++ b/locale/ru/LC_MESSAGES/Behavioral/Visitor/README.po @@ -0,0 +1,75 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Visitor/README.rst:2 +msgid "`Visitor`_" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:7 +msgid "" +"The Visitor Pattern lets you outsource operations on objects to other " +"objects. The main reason to do this is to keep a separation of concerns. But" +" classes have to define a contract to allow visitors (the ``Role::accept`` " +"method in the example)." +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:12 +msgid "" +"The contract is an abstract class but you can have also a clean interface. " +"In that case, each Visitor has to choose itself which method to invoke on " +"the visitor." +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:17 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:24 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:26 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:28 +msgid "RoleVisitorInterface.php" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:34 +msgid "RolePrintVisitor.php" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:40 +msgid "Role.php" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:46 +msgid "User.php" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:52 +msgid "Group.php" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:59 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:61 +msgid "Tests/VisitorTest.php" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Creational/AbstractFactory/README.po b/locale/ru/LC_MESSAGES/Creational/AbstractFactory/README.po new file mode 100644 index 0000000..6213f0e --- /dev/null +++ b/locale/ru/LC_MESSAGES/Creational/AbstractFactory/README.po @@ -0,0 +1,88 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/AbstractFactory/README.rst:2 +msgid "`Abstract Factory`_" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:7 +msgid "" +"To create series of related or dependent objects without specifying their " +"concrete classes. Usually the created classes all implement the same " +"interface. The client of the abstract factory does not care about how these " +"objects are created, he just knows how they go together." +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:13 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:20 +msgid "Code" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:22 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:24 +msgid "AbstractFactory.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:30 +msgid "JsonFactory.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:36 +msgid "HtmlFactory.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:42 +msgid "MediaInterface.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:48 +msgid "Picture.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:54 +msgid "Text.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:60 +msgid "Json/Picture.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:66 +msgid "Json/Text.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:72 +msgid "Html/Picture.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:78 +msgid "Html/Text.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:85 +msgid "Test" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:87 +msgid "Tests/AbstractFactoryTest.php" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Creational/Builder/README.po b/locale/ru/LC_MESSAGES/Creational/Builder/README.po new file mode 100644 index 0000000..dfb357a --- /dev/null +++ b/locale/ru/LC_MESSAGES/Creational/Builder/README.po @@ -0,0 +1,110 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/Builder/README.rst:2 +msgid "`Builder`_" +msgstr "" + +#: ../../Creational/Builder/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/Builder/README.rst:7 +msgid "Builder is an interface that build parts of a complex object." +msgstr "" + +#: ../../Creational/Builder/README.rst:9 +msgid "" +"Sometimes, if the builder has a better knowledge of what it builds, this " +"interface could be an abstract class with default methods (aka adapter)." +msgstr "" + +#: ../../Creational/Builder/README.rst:12 +msgid "" +"If you have a complex inheritance tree for objects, it is logical to have a " +"complex inheritance tree for builders too." +msgstr "" + +#: ../../Creational/Builder/README.rst:15 +msgid "" +"Note: Builders have often a fluent interface, see the mock builder of " +"PHPUnit for example." +msgstr "" + +#: ../../Creational/Builder/README.rst:19 +msgid "Examples" +msgstr "" + +#: ../../Creational/Builder/README.rst:21 +msgid "PHPUnit: Mock Builder" +msgstr "" + +#: ../../Creational/Builder/README.rst:24 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/Builder/README.rst:31 +msgid "Code" +msgstr "" + +#: ../../Creational/Builder/README.rst:33 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/Builder/README.rst:35 +msgid "Director.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:41 +msgid "BuilderInterface.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:47 +msgid "BikeBuilder.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:53 +msgid "CarBuilder.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:59 +msgid "Parts/Vehicle.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:65 +msgid "Parts/Bike.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:71 +msgid "Parts/Car.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:77 +msgid "Parts/Engine.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:83 +msgid "Parts/Wheel.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:89 +msgid "Parts/Door.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:96 +msgid "Test" +msgstr "" + +#: ../../Creational/Builder/README.rst:98 +msgid "Tests/DirectorTest.php" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Creational/FactoryMethod/README.po b/locale/ru/LC_MESSAGES/Creational/FactoryMethod/README.po new file mode 100644 index 0000000..29fd708 --- /dev/null +++ b/locale/ru/LC_MESSAGES/Creational/FactoryMethod/README.po @@ -0,0 +1,90 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/FactoryMethod/README.rst:2 +msgid "`Factory Method`_" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:7 +msgid "" +"The good point over the SimpleFactory is you can subclass it to implement " +"different ways to create objects" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:10 +msgid "For simple case, this abstract class could be just an interface" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:12 +msgid "" +"This pattern is a \"real\" Design Pattern because it achieves the " +"\"Dependency Inversion Principle\" a.k.a the \"D\" in S.O.L.I.D principles." +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:15 +msgid "" +"It means the FactoryMethod class depends on abstractions, not concrete " +"classes. This is the real trick compared to SimpleFactory or StaticFactory." +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:31 +msgid "FactoryMethod.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:37 +msgid "ItalianFactory.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:43 +msgid "GermanFactory.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:49 +msgid "VehicleInterface.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:55 +msgid "Porsche.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:61 +msgid "Bicycle.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:67 +msgid "Ferrari.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:74 +msgid "Test" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:76 +msgid "Tests/FactoryMethodTest.php" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Creational/Multiton/README.po b/locale/ru/LC_MESSAGES/Creational/Multiton/README.po new file mode 100644 index 0000000..0990e3c --- /dev/null +++ b/locale/ru/LC_MESSAGES/Creational/Multiton/README.po @@ -0,0 +1,64 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/Multiton/README.rst:2 +msgid "Multiton" +msgstr "" + +#: ../../Creational/Multiton/README.rst:4 +msgid "" +"**THIS IS CONSIDERED TO BE AN ANTI-PATTERN! FOR BETTER TESTABILITY AND " +"MAINTAINABILITY USE DEPENDENCY INJECTION!**" +msgstr "" + +#: ../../Creational/Multiton/README.rst:8 +msgid "Purpose" +msgstr "" + +#: ../../Creational/Multiton/README.rst:10 +msgid "" +"To have only a list of named instances that are used, like a singleton but " +"with n instances." +msgstr "" + +#: ../../Creational/Multiton/README.rst:14 +msgid "Examples" +msgstr "" + +#: ../../Creational/Multiton/README.rst:16 +msgid "2 DB Connectors, e.g. one for MySQL, the other for SQLite" +msgstr "" + +#: ../../Creational/Multiton/README.rst:17 +msgid "multiple Loggers (one for debug messages, one for errors)" +msgstr "" + +#: ../../Creational/Multiton/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/Multiton/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Creational/Multiton/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/Multiton/README.rst:31 +msgid "Multiton.php" +msgstr "" + +#: ../../Creational/Multiton/README.rst:38 +msgid "Test" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Creational/Pool/README.po b/locale/ru/LC_MESSAGES/Creational/Pool/README.po new file mode 100644 index 0000000..6d829be --- /dev/null +++ b/locale/ru/LC_MESSAGES/Creational/Pool/README.po @@ -0,0 +1,81 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/Pool/README.rst:2 +msgid "`Pool`_" +msgstr "" + +#: ../../Creational/Pool/README.rst:4 +msgid "" +"The **object pool pattern** is a software creational design pattern that " +"uses a set of initialized objects kept ready to use – a \"pool\" – rather " +"than allocating and destroying them on demand. A client of the pool will " +"request an object from the pool and perform operations on the returned " +"object. When the client has finished, it returns the object, which is a " +"specific type of factory object, to the pool rather than destroying it." +msgstr "" + +#: ../../Creational/Pool/README.rst:11 +msgid "" +"Object pooling can offer a significant performance boost in situations where" +" the cost of initializing a class instance is high, the rate of " +"instantiation of a class is high, and the number of instances in use at any " +"one time is low. The pooled object is obtained in predictable time when " +"creation of the new objects (especially over network) may take variable " +"time." +msgstr "" + +#: ../../Creational/Pool/README.rst:18 +msgid "" +"However these benefits are mostly true for objects that are expensive with " +"respect to time, such as database connections, socket connections, threads " +"and large graphic objects like fonts or bitmaps. In certain situations, " +"simple object pooling (that hold no external resources, but only occupy " +"memory) may not be efficient and could decrease performance." +msgstr "" + +#: ../../Creational/Pool/README.rst:25 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/Pool/README.rst:32 +msgid "Code" +msgstr "" + +#: ../../Creational/Pool/README.rst:34 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/Pool/README.rst:36 +msgid "Pool.php" +msgstr "" + +#: ../../Creational/Pool/README.rst:42 +msgid "Processor.php" +msgstr "" + +#: ../../Creational/Pool/README.rst:48 +msgid "Worker.php" +msgstr "" + +#: ../../Creational/Pool/README.rst:55 +msgid "Test" +msgstr "" + +#: ../../Creational/Pool/README.rst:57 +msgid "Tests/PoolTest.php" +msgstr "" + +#: ../../Creational/Pool/README.rst:63 +msgid "Tests/TestWorker.php" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Creational/Prototype/README.po b/locale/ru/LC_MESSAGES/Creational/Prototype/README.po new file mode 100644 index 0000000..6cdc786 --- /dev/null +++ b/locale/ru/LC_MESSAGES/Creational/Prototype/README.po @@ -0,0 +1,68 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/Prototype/README.rst:2 +msgid "`Prototype`_" +msgstr "" + +#: ../../Creational/Prototype/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/Prototype/README.rst:7 +msgid "" +"To avoid the cost of creating objects the standard way (new Foo()) and " +"instead create a prototype and clone it." +msgstr "" + +#: ../../Creational/Prototype/README.rst:11 +msgid "Examples" +msgstr "" + +#: ../../Creational/Prototype/README.rst:13 +msgid "" +"Large amounts of data (e.g. create 1,000,000 rows in a database at once via " +"a ORM)." +msgstr "" + +#: ../../Creational/Prototype/README.rst:17 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/Prototype/README.rst:24 +msgid "Code" +msgstr "" + +#: ../../Creational/Prototype/README.rst:26 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/Prototype/README.rst:28 +msgid "index.php" +msgstr "" + +#: ../../Creational/Prototype/README.rst:34 +msgid "BookPrototype.php" +msgstr "" + +#: ../../Creational/Prototype/README.rst:40 +msgid "BarBookPrototype.php" +msgstr "" + +#: ../../Creational/Prototype/README.rst:46 +msgid "FooBookPrototype.php" +msgstr "" + +#: ../../Creational/Prototype/README.rst:53 +msgid "Test" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Creational/README.po b/locale/ru/LC_MESSAGES/Creational/README.po new file mode 100644 index 0000000..4d9d72d --- /dev/null +++ b/locale/ru/LC_MESSAGES/Creational/README.po @@ -0,0 +1,25 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/README.rst:2 +msgid "Creational" +msgstr "" + +#: ../../Creational/README.rst:4 +msgid "" +"In software engineering, creational design patterns are design patterns that" +" deal with object creation mechanisms, trying to create objects in a manner " +"suitable to the situation. The basic form of object creation could result in" +" design problems or added complexity to the design. Creational design " +"patterns solve this problem by somehow controlling this object creation." +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Creational/SimpleFactory/README.po b/locale/ru/LC_MESSAGES/Creational/SimpleFactory/README.po new file mode 100644 index 0000000..a36955e --- /dev/null +++ b/locale/ru/LC_MESSAGES/Creational/SimpleFactory/README.po @@ -0,0 +1,72 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/SimpleFactory/README.rst:2 +msgid "Simple Factory" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:7 +msgid "ConcreteFactory is a simple factory pattern." +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:9 +msgid "" +"It differs from the static factory because it is NOT static and as you know:" +" static => global => evil!" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:12 +msgid "" +"Therefore, you can have multiple factories, differently parametrized, you " +"can subclass it and you can mock-up it." +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:16 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:23 +msgid "Code" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:25 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:27 +msgid "ConcreteFactory.php" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:33 +msgid "VehicleInterface.php" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:39 +msgid "Bicycle.php" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:45 +msgid "Scooter.php" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:52 +msgid "Test" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:54 +msgid "Tests/SimpleFactoryTest.php" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Creational/Singleton/README.po b/locale/ru/LC_MESSAGES/Creational/Singleton/README.po new file mode 100644 index 0000000..4911734 --- /dev/null +++ b/locale/ru/LC_MESSAGES/Creational/Singleton/README.po @@ -0,0 +1,75 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/Singleton/README.rst:2 +msgid "`Singleton`_" +msgstr "" + +#: ../../Creational/Singleton/README.rst:4 +msgid "" +"**THIS IS CONSIDERED TO BE AN ANTI-PATTERN! FOR BETTER TESTABILITY AND " +"MAINTAINABILITY USE DEPENDENCY INJECTION!**" +msgstr "" + +#: ../../Creational/Singleton/README.rst:8 +msgid "Purpose" +msgstr "" + +#: ../../Creational/Singleton/README.rst:10 +msgid "" +"To have only one instance of this object in the application that will handle" +" all calls." +msgstr "" + +#: ../../Creational/Singleton/README.rst:14 +msgid "Examples" +msgstr "" + +#: ../../Creational/Singleton/README.rst:16 +msgid "DB Connector" +msgstr "" + +#: ../../Creational/Singleton/README.rst:17 +msgid "" +"Logger (may also be a Multiton if there are many log files for several " +"purposes)" +msgstr "" + +#: ../../Creational/Singleton/README.rst:19 +msgid "" +"Lock file for the application (there is only one in the filesystem ...)" +msgstr "" + +#: ../../Creational/Singleton/README.rst:23 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/Singleton/README.rst:30 +msgid "Code" +msgstr "" + +#: ../../Creational/Singleton/README.rst:32 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/Singleton/README.rst:34 +msgid "Singleton.php" +msgstr "" + +#: ../../Creational/Singleton/README.rst:41 +msgid "Test" +msgstr "" + +#: ../../Creational/Singleton/README.rst:43 +msgid "Tests/SingletonTest.php" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Creational/StaticFactory/README.po b/locale/ru/LC_MESSAGES/Creational/StaticFactory/README.po new file mode 100644 index 0000000..3e84e15 --- /dev/null +++ b/locale/ru/LC_MESSAGES/Creational/StaticFactory/README.po @@ -0,0 +1,75 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/StaticFactory/README.rst:2 +msgid "Static Factory" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:7 +msgid "" +"Similar to the AbstractFactory, this pattern is used to create series of " +"related or dependent objects. The difference between this and the abstract " +"factory pattern is that the static factory pattern uses just one static " +"method to create all types of objects it can create. It is usually named " +"``factory`` or ``build``." +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:14 +msgid "Examples" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:16 +msgid "" +"Zend Framework: ``Zend_Cache_Backend`` or ``_Frontend`` use a factory method" +" create cache backends or frontends" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:31 +msgid "StaticFactory.php" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:37 +msgid "FormatterInterface.php" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:43 +msgid "FormatString.php" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:49 +msgid "FormatNumber.php" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:56 +msgid "Test" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:58 +msgid "Tests/StaticFactoryTest.php" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/More/Delegation/README.po b/locale/ru/LC_MESSAGES/More/Delegation/README.po new file mode 100644 index 0000000..ff40269 --- /dev/null +++ b/locale/ru/LC_MESSAGES/More/Delegation/README.po @@ -0,0 +1,60 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../More/Delegation/README.rst:2 +msgid "`Delegation`_" +msgstr "" + +#: ../../More/Delegation/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../More/Delegation/README.rst:7 ../../More/Delegation/README.rst:12 +msgid "..." +msgstr "" + +#: ../../More/Delegation/README.rst:10 +msgid "Examples" +msgstr "" + +#: ../../More/Delegation/README.rst:15 +msgid "UML Diagram" +msgstr "" + +#: ../../More/Delegation/README.rst:22 +msgid "Code" +msgstr "" + +#: ../../More/Delegation/README.rst:24 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../More/Delegation/README.rst:26 +msgid "Usage.php" +msgstr "" + +#: ../../More/Delegation/README.rst:32 +msgid "TeamLead.php" +msgstr "" + +#: ../../More/Delegation/README.rst:38 +msgid "JuniorDeveloper.php" +msgstr "" + +#: ../../More/Delegation/README.rst:45 +msgid "Test" +msgstr "" + +#: ../../More/Delegation/README.rst:47 +msgid "Tests/DelegationTest.php" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/More/README.po b/locale/ru/LC_MESSAGES/More/README.po new file mode 100644 index 0000000..c4c30fe --- /dev/null +++ b/locale/ru/LC_MESSAGES/More/README.po @@ -0,0 +1,16 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../More/README.rst:2 +msgid "More" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/More/Repository/README.po b/locale/ru/LC_MESSAGES/More/Repository/README.po new file mode 100644 index 0000000..4849f4f --- /dev/null +++ b/locale/ru/LC_MESSAGES/More/Repository/README.po @@ -0,0 +1,76 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../More/Repository/README.rst:2 +msgid "Repository" +msgstr "" + +#: ../../More/Repository/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../More/Repository/README.rst:7 +msgid "" +"Mediates between the domain and data mapping layers using a collection-like " +"interface for accessing domain objects. Repository encapsulates the set of " +"objects persisted in a data store and the operations performed over them, " +"providing a more object-oriented view of the persistence layer. Repository " +"also supports the objective of achieving a clean separation and one-way " +"dependency between the domain and data mapping layers." +msgstr "" + +#: ../../More/Repository/README.rst:16 +msgid "Examples" +msgstr "" + +#: ../../More/Repository/README.rst:18 +msgid "" +"Doctrine 2 ORM: there is Repository that mediates between Entity and DBAL " +"and contains methods to retrieve objects" +msgstr "" + +#: ../../More/Repository/README.rst:20 +msgid "Laravel Framework" +msgstr "" + +#: ../../More/Repository/README.rst:23 +msgid "UML Diagram" +msgstr "" + +#: ../../More/Repository/README.rst:30 +msgid "Code" +msgstr "" + +#: ../../More/Repository/README.rst:32 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../More/Repository/README.rst:34 +msgid "Post.php" +msgstr "" + +#: ../../More/Repository/README.rst:40 +msgid "PostRepository.php" +msgstr "" + +#: ../../More/Repository/README.rst:46 +msgid "Storage.php" +msgstr "" + +#: ../../More/Repository/README.rst:52 +msgid "MemoryStorage.php" +msgstr "" + +#: ../../More/Repository/README.rst:59 +msgid "Test" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/More/ServiceLocator/README.po b/locale/ru/LC_MESSAGES/More/ServiceLocator/README.po new file mode 100644 index 0000000..8f3537e --- /dev/null +++ b/locale/ru/LC_MESSAGES/More/ServiceLocator/README.po @@ -0,0 +1,94 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../More/ServiceLocator/README.rst:2 +msgid "`Service Locator`_" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:7 +msgid "" +"To implement a loosely coupled architecture in order to get better testable," +" maintainable and extendable code. DI pattern and Service Locator pattern " +"are an implementation of the Inverse of Control pattern." +msgstr "" + +#: ../../More/ServiceLocator/README.rst:12 +msgid "Usage" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:14 +msgid "" +"With ``ServiceLocator`` you can register a service for a given interface. By" +" using the interface you can retrieve the service and use it in the classes " +"of the application without knowing its implementation. You can configure and" +" inject the Service Locator object on bootstrap." +msgstr "" + +#: ../../More/ServiceLocator/README.rst:20 +msgid "Examples" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:22 +msgid "" +"Zend Framework 2 uses Service Locator to create and share services used in " +"the framework(i.e. EventManager, ModuleManager, all custom user services " +"provided by modules, etc...)" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:27 +msgid "UML Diagram" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:34 +msgid "Code" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:36 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:38 +msgid "ServiceLocatorInterface.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:44 +msgid "ServiceLocator.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:50 +msgid "LogServiceInterface.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:56 +msgid "LogService.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:62 +msgid "DatabaseServiceInterface.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:68 +msgid "DatabaseService.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:75 +msgid "Test" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:77 +msgid "Tests/ServiceLocatorTest.php" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/README.po b/locale/ru/LC_MESSAGES/README.po new file mode 100644 index 0000000..84e21de --- /dev/null +++ b/locale/ru/LC_MESSAGES/README.po @@ -0,0 +1,93 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../README.rst:5 +msgid "DesignPatternsPHP" +msgstr "" + +#: ../../README.rst:11 +msgid "" +"This is a collection of known `design patterns`_ and some sample code how to" +" implement them in PHP. Every pattern has a small list of examples (most of " +"them from Zend Framework, Symfony2 or Doctrine2 as I'm most familiar with " +"this software)." +msgstr "" + +#: ../../README.rst:16 +msgid "" +"I think the problem with patterns is that often people do know them but " +"don't know when to apply which." +msgstr "" + +#: ../../README.rst:20 +msgid "Patterns" +msgstr "" + +#: ../../README.rst:22 +msgid "" +"The patterns can be structured in roughly three different categories. Please" +" click on **the title of every pattern's page** for a full explanation of " +"the pattern on Wikipedia." +msgstr "" + +#: ../../README.rst:35 +msgid "Contribute" +msgstr "" + +#: ../../README.rst:37 +msgid "" +"Please feel free to fork and extend existing or add your own examples and " +"send a pull request with your changes! To establish a consistent code " +"quality, please check your code using `PHP CodeSniffer`_ against `PSR2 " +"standard`_ using ``./vendor/bin/phpcs -p --standard=PSR2 --ignore=vendor " +".``." +msgstr "" + +#: ../../README.rst:44 +msgid "License" +msgstr "" + +#: ../../README.rst:46 +msgid "(The MIT License)" +msgstr "" + +#: ../../README.rst:48 +msgid "Copyright (c) 2014 `Dominik Liebler`_ and `contributors`_" +msgstr "" + +#: ../../README.rst:50 +msgid "" +"Permission is hereby granted, free of charge, to any person obtaining a copy" +" of this software and associated documentation files (the 'Software'), to " +"deal in the Software without restriction, including without limitation the " +"rights to use, copy, modify, merge, publish, distribute, sublicense, and/or " +"sell copies of the Software, and to permit persons to whom the Software is " +"furnished to do so, subject to the following conditions:" +msgstr "" + +#: ../../README.rst:58 +msgid "" +"The above copyright notice and this permission notice shall be included in " +"all copies or substantial portions of the Software." +msgstr "" + +#: ../../README.rst:61 +msgid "" +"THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR " +"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, " +"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE " +"AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER " +"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING " +"FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS" +" IN THE SOFTWARE." +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Structural/Adapter/README.po b/locale/ru/LC_MESSAGES/Structural/Adapter/README.po new file mode 100644 index 0000000..420b400 --- /dev/null +++ b/locale/ru/LC_MESSAGES/Structural/Adapter/README.po @@ -0,0 +1,82 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Adapter/README.rst:2 +msgid "`Adapter / Wrapper`_" +msgstr "" + +#: ../../Structural/Adapter/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Adapter/README.rst:7 +msgid "" +"To translate one interface for a class into a compatible interface. An " +"adapter allows classes to work together that normally could not because of " +"incompatible interfaces by providing it's interface to clients while using " +"the original interface." +msgstr "" + +#: ../../Structural/Adapter/README.rst:13 +msgid "Examples" +msgstr "" + +#: ../../Structural/Adapter/README.rst:15 +msgid "DB Client libraries adapter" +msgstr "" + +#: ../../Structural/Adapter/README.rst:16 +msgid "" +"using multiple different webservices and adapters normalize data so that the" +" outcome is the same for all" +msgstr "" + +#: ../../Structural/Adapter/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Adapter/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Structural/Adapter/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Adapter/README.rst:31 +msgid "PaperBookInterface.php" +msgstr "" + +#: ../../Structural/Adapter/README.rst:37 +msgid "Book.php" +msgstr "" + +#: ../../Structural/Adapter/README.rst:43 +msgid "EBookAdapter.php" +msgstr "" + +#: ../../Structural/Adapter/README.rst:49 +msgid "EBookInterface.php" +msgstr "" + +#: ../../Structural/Adapter/README.rst:55 +msgid "Kindle.php" +msgstr "" + +#: ../../Structural/Adapter/README.rst:62 +msgid "Test" +msgstr "" + +#: ../../Structural/Adapter/README.rst:64 +msgid "Tests/AdapterTest.php" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Structural/Bridge/README.po b/locale/ru/LC_MESSAGES/Structural/Bridge/README.po new file mode 100644 index 0000000..6e9ae00 --- /dev/null +++ b/locale/ru/LC_MESSAGES/Structural/Bridge/README.po @@ -0,0 +1,78 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Bridge/README.rst:2 +msgid "`Bridge`_" +msgstr "" + +#: ../../Structural/Bridge/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Bridge/README.rst:7 +msgid "" +"Decouple an abstraction from its implementation so that the two can vary " +"independently. (http://en.wikipedia.org/wiki/Bridge\\_pattern)" +msgstr "" + +#: ../../Structural/Bridge/README.rst:11 +msgid "Sample:" +msgstr "" + +#: ../../Structural/Bridge/README.rst:13 +msgid "`Symfony DoctrineBridge `__" +msgstr "" + +#: ../../Structural/Bridge/README.rst:17 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Bridge/README.rst:24 +msgid "Code" +msgstr "" + +#: ../../Structural/Bridge/README.rst:26 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Bridge/README.rst:28 +msgid "Workshop.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:34 +msgid "Assemble.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:40 +msgid "Produce.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:46 +msgid "Vehicle.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:52 +msgid "Motorcycle.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:58 +msgid "Car.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:65 +msgid "Test" +msgstr "" + +#: ../../Structural/Bridge/README.rst:67 +msgid "Tests/BridgeTest.php" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Structural/Composite/README.po b/locale/ru/LC_MESSAGES/Structural/Composite/README.po new file mode 100644 index 0000000..ce6ce1a --- /dev/null +++ b/locale/ru/LC_MESSAGES/Structural/Composite/README.po @@ -0,0 +1,78 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Composite/README.rst:2 +msgid "`Composite`_" +msgstr "" + +#: ../../Structural/Composite/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Composite/README.rst:7 +msgid "" +"To treat a group of objects the same way as a single instance of the object." +msgstr "" + +#: ../../Structural/Composite/README.rst:11 +msgid "Examples" +msgstr "" + +#: ../../Structural/Composite/README.rst:13 +msgid "" +"a form class instance handles all its form elements like a single instance " +"of the form, when ``render()`` is called, it subsequently runs through all " +"its child elements and calls ``render()`` on them" +msgstr "" + +#: ../../Structural/Composite/README.rst:16 +msgid "" +"``Zend_Config``: a tree of configuration options, each one is a " +"``Zend_Config`` object itself" +msgstr "" + +#: ../../Structural/Composite/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Composite/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Structural/Composite/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Composite/README.rst:31 +msgid "FormElement.php" +msgstr "" + +#: ../../Structural/Composite/README.rst:37 +msgid "Form.php" +msgstr "" + +#: ../../Structural/Composite/README.rst:43 +msgid "InputElement.php" +msgstr "" + +#: ../../Structural/Composite/README.rst:49 +msgid "TextElement.php" +msgstr "" + +#: ../../Structural/Composite/README.rst:56 +msgid "Test" +msgstr "" + +#: ../../Structural/Composite/README.rst:58 +msgid "Tests/CompositeTest.php" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Structural/DataMapper/README.po b/locale/ru/LC_MESSAGES/Structural/DataMapper/README.po new file mode 100644 index 0000000..28b8d4a --- /dev/null +++ b/locale/ru/LC_MESSAGES/Structural/DataMapper/README.po @@ -0,0 +1,77 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/DataMapper/README.rst:2 +msgid "`Data Mapper`_" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:7 +msgid "" +"A Data Mapper, is a Data Access Layer that performs bidirectional transfer " +"of data between a persistent data store (often a relational database) and an" +" in memory data representation (the domain layer). The goal of the pattern " +"is to keep the in memory representation and the persistent data store " +"independent of each other and the data mapper itself. The layer is composed " +"of one or more mappers (or Data Access Objects), performing the data " +"transfer. Mapper implementations vary in scope. Generic mappers will handle " +"many different domain entity types, dedicated mappers will handle one or a " +"few." +msgstr "" + +#: ../../Structural/DataMapper/README.rst:17 +msgid "" +"The key point of this pattern is, unlike Active Record pattern, the data " +"model follows Single Responsibility Principle." +msgstr "" + +#: ../../Structural/DataMapper/README.rst:21 +msgid "Examples" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:23 +msgid "" +"DB Object Relational Mapper (ORM) : Doctrine2 uses DAO named as " +"\"EntityRepository\"" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:27 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:34 +msgid "Code" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:36 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:38 +msgid "User.php" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:44 +msgid "UserMapper.php" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:51 +msgid "Test" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:53 +msgid "Tests/DataMapperTest.php" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Structural/Decorator/README.po b/locale/ru/LC_MESSAGES/Structural/Decorator/README.po new file mode 100644 index 0000000..b752b90 --- /dev/null +++ b/locale/ru/LC_MESSAGES/Structural/Decorator/README.po @@ -0,0 +1,78 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Decorator/README.rst:2 +msgid "`Decorator`_" +msgstr "" + +#: ../../Structural/Decorator/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Decorator/README.rst:7 +msgid "To dynamically add new functionality to class instances." +msgstr "" + +#: ../../Structural/Decorator/README.rst:10 +msgid "Examples" +msgstr "" + +#: ../../Structural/Decorator/README.rst:12 +msgid "Zend Framework: decorators for ``Zend_Form_Element`` instances" +msgstr "" + +#: ../../Structural/Decorator/README.rst:13 +msgid "" +"Web Service Layer: Decorators JSON and XML for a REST service (in this case," +" only one of these should be allowed of course)" +msgstr "" + +#: ../../Structural/Decorator/README.rst:17 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Decorator/README.rst:24 +msgid "Code" +msgstr "" + +#: ../../Structural/Decorator/README.rst:26 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Decorator/README.rst:28 +msgid "RendererInterface.php" +msgstr "" + +#: ../../Structural/Decorator/README.rst:34 +msgid "Webservice.php" +msgstr "" + +#: ../../Structural/Decorator/README.rst:40 +msgid "Decorator.php" +msgstr "" + +#: ../../Structural/Decorator/README.rst:46 +msgid "RenderInXml.php" +msgstr "" + +#: ../../Structural/Decorator/README.rst:52 +msgid "RenderInJson.php" +msgstr "" + +#: ../../Structural/Decorator/README.rst:59 +msgid "Test" +msgstr "" + +#: ../../Structural/Decorator/README.rst:61 +msgid "Tests/DecoratorTest.php" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Structural/DependencyInjection/README.po b/locale/ru/LC_MESSAGES/Structural/DependencyInjection/README.po new file mode 100644 index 0000000..9e6e9fa --- /dev/null +++ b/locale/ru/LC_MESSAGES/Structural/DependencyInjection/README.po @@ -0,0 +1,107 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/DependencyInjection/README.rst:2 +msgid "`Dependency Injection`_" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:7 +msgid "" +"To implement a loosely coupled architecture in order to get better testable," +" maintainable and extendable code." +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:11 +msgid "Usage" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:13 +msgid "" +"Configuration gets injected and ``Connection`` will get all that it needs " +"from ``$config``. Without DI, the configuration would be created directly in" +" ``Connection``, which is not very good for testing and extending " +"``Connection``." +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:18 +msgid "" +"Notice we are following Inversion of control principle in ``Connection`` by " +"asking ``$config`` to implement ``Parameters`` interface. This decouples our" +" components. We don't care where the source of information comes from, we " +"only care that ``$config`` has certain methods to retrieve that information." +" Read more about Inversion of control `here " +"`__." +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:26 +msgid "Examples" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:28 +msgid "" +"The Doctrine2 ORM uses dependency injection e.g. for configuration that is " +"injected into a ``Connection`` object. For testing purposes, one can easily " +"create a mock object of the configuration and inject that into the " +"``Connection`` object" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:32 +msgid "" +"Symfony and Zend Framework 2 already have containers for DI that create " +"objects via a configuration array and inject them where needed (i.e. in " +"Controllers)" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:37 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:44 +msgid "Code" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:46 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:48 +msgid "AbstractConfig.php" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:54 +msgid "Parameters.php" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:60 +msgid "ArrayConfig.php" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:66 +msgid "Connection.php" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:73 +msgid "Test" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:75 +msgid "Tests/DependencyInjectionTest.php" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:81 +msgid "Tests/config.php" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Structural/Facade/README.po b/locale/ru/LC_MESSAGES/Structural/Facade/README.po new file mode 100644 index 0000000..8f8fd9b --- /dev/null +++ b/locale/ru/LC_MESSAGES/Structural/Facade/README.po @@ -0,0 +1,87 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Facade/README.rst:2 +msgid "`Facade`_" +msgstr "" + +#: ../../Structural/Facade/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Facade/README.rst:7 +msgid "" +"The primary goal of a Facade Pattern is not to avoid you to read the manual " +"of a complex API. It's only a side-effect. The first goal is to reduce " +"coupling and follow the Law of Demeter." +msgstr "" + +#: ../../Structural/Facade/README.rst:11 +msgid "" +"A Facade is meant to decouple a client and a sub-system by embedding many " +"(but sometimes just one) interface, and of course to reduce complexity." +msgstr "" + +#: ../../Structural/Facade/README.rst:15 +msgid "A facade does not forbid you the access to the sub-system" +msgstr "" + +#: ../../Structural/Facade/README.rst:16 +msgid "You can (you should) have multiple facades for one sub-system" +msgstr "" + +#: ../../Structural/Facade/README.rst:18 +msgid "" +"That's why a good facade has no ``new`` in it. If there are multiple " +"creations for each method, it is not a Facade, it's a Builder or a " +"[Abstract\\|Static\\|Simple] Factory [Method]." +msgstr "" + +#: ../../Structural/Facade/README.rst:22 +msgid "" +"The best facade has no ``new`` and a constructor with interface-type-hinted " +"parameters. If you need creation of new instances, use a Factory as " +"argument." +msgstr "" + +#: ../../Structural/Facade/README.rst:27 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Facade/README.rst:34 +msgid "Code" +msgstr "" + +#: ../../Structural/Facade/README.rst:36 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Facade/README.rst:38 +msgid "Facade.php" +msgstr "" + +#: ../../Structural/Facade/README.rst:44 +msgid "OsInterface.php" +msgstr "" + +#: ../../Structural/Facade/README.rst:50 +msgid "BiosInterface.php" +msgstr "" + +#: ../../Structural/Facade/README.rst:57 +msgid "Test" +msgstr "" + +#: ../../Structural/Facade/README.rst:59 +msgid "Tests/FacadeTest.php" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Structural/FluentInterface/README.po b/locale/ru/LC_MESSAGES/Structural/FluentInterface/README.po new file mode 100644 index 0000000..a0d1de7 --- /dev/null +++ b/locale/ru/LC_MESSAGES/Structural/FluentInterface/README.po @@ -0,0 +1,66 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/FluentInterface/README.rst:2 +msgid "`Fluent Interface`_" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:7 +msgid "" +"To write code that is easy readable just like sentences in a natural " +"language (like English)." +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:11 +msgid "Examples" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:13 +msgid "Doctrine2's QueryBuilder works something like that example class below" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:15 +msgid "PHPUnit uses fluent interfaces to build mock objects" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:16 +msgid "Yii Framework: CDbCommand and CActiveRecord use this pattern, too" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:19 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:26 +msgid "Code" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:28 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:30 +msgid "Sql.php" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:37 +msgid "Test" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:39 +msgid "Tests/FluentInterfaceTest.php" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Structural/Proxy/README.po b/locale/ru/LC_MESSAGES/Structural/Proxy/README.po new file mode 100644 index 0000000..3272dfd --- /dev/null +++ b/locale/ru/LC_MESSAGES/Structural/Proxy/README.po @@ -0,0 +1,59 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Proxy/README.rst:2 +msgid "`Proxy`_" +msgstr "" + +#: ../../Structural/Proxy/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Proxy/README.rst:7 +msgid "To interface to anything that is expensive or impossible to duplicate." +msgstr "" + +#: ../../Structural/Proxy/README.rst:10 +msgid "Examples" +msgstr "" + +#: ../../Structural/Proxy/README.rst:12 +msgid "" +"Doctrine2 uses proxies to implement framework magic (e.g. lazy " +"initialization) in them, while the user still works with his own entity " +"classes and will never use nor touch the proxies" +msgstr "" + +#: ../../Structural/Proxy/README.rst:17 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Proxy/README.rst:24 +msgid "Code" +msgstr "" + +#: ../../Structural/Proxy/README.rst:26 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Proxy/README.rst:28 +msgid "Record.php" +msgstr "" + +#: ../../Structural/Proxy/README.rst:34 +msgid "RecordProxy.php" +msgstr "" + +#: ../../Structural/Proxy/README.rst:41 +msgid "Test" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Structural/README.po b/locale/ru/LC_MESSAGES/Structural/README.po new file mode 100644 index 0000000..2d2af2d --- /dev/null +++ b/locale/ru/LC_MESSAGES/Structural/README.po @@ -0,0 +1,23 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/README.rst:2 +msgid "Structural" +msgstr "" + +#: ../../Structural/README.rst:4 +msgid "" +"In Software Engineering, Structural Design Patterns are Design Patterns that" +" ease the design by identifying a simple way to realize relationships " +"between entities." +msgstr "" diff --git a/locale/ru/LC_MESSAGES/Structural/Registry/README.po b/locale/ru/LC_MESSAGES/Structural/Registry/README.po new file mode 100644 index 0000000..8cff9f1 --- /dev/null +++ b/locale/ru/LC_MESSAGES/Structural/Registry/README.po @@ -0,0 +1,67 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Registry/README.rst:2 +msgid "`Registry`_" +msgstr "" + +#: ../../Structural/Registry/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Registry/README.rst:7 +msgid "" +"To implement a central storage for objects often used throughout the " +"application, is typically implemented using an abstract class with only " +"static methods (or using the Singleton pattern)" +msgstr "" + +#: ../../Structural/Registry/README.rst:12 +msgid "Examples" +msgstr "" + +#: ../../Structural/Registry/README.rst:14 +msgid "" +"Zend Framework: ``Zend_Registry`` holds the application's logger object, " +"front controller etc." +msgstr "" + +#: ../../Structural/Registry/README.rst:16 +msgid "" +"Yii Framework: ``CWebApplication`` holds all the application components, " +"such as ``CWebUser``, ``CUrlManager``, etc." +msgstr "" + +#: ../../Structural/Registry/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Registry/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Structural/Registry/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Registry/README.rst:31 +msgid "Registry.php" +msgstr "" + +#: ../../Structural/Registry/README.rst:38 +msgid "Test" +msgstr "" + +#: ../../Structural/Registry/README.rst:40 +msgid "Tests/RegistryTest.php" +msgstr "" From fa36638e885bfbfda182dc2f518d0e85634b347c Mon Sep 17 00:00:00 2001 From: Faust Date: Fri, 29 May 2015 12:11:16 +0200 Subject: [PATCH 028/127] use Anonymous Hyperlinks for wikipedia link --- Behavioral/ChainOfResponsibilities/README.rst | 6 +++--- Behavioral/Command/README.rst | 6 +++--- Behavioral/Iterator/README.rst | 6 +++--- Behavioral/Mediator/README.rst | 6 +++--- Behavioral/Memento/README.rst | 6 +++--- Behavioral/NullObject/README.rst | 6 +++--- Behavioral/Observer/README.rst | 6 +++--- Behavioral/Specification/README.rst | 6 +++--- Behavioral/State/README.rst | 6 +++--- Behavioral/Strategy/README.rst | 6 +++--- Behavioral/TemplateMethod/README.rst | 6 +++--- Behavioral/Visitor/README.rst | 6 +++--- Creational/AbstractFactory/README.rst | 6 +++--- Creational/Builder/README.rst | 6 +++--- Creational/FactoryMethod/README.rst | 6 +++--- Creational/Pool/README.rst | 6 +++--- Creational/Prototype/README.rst | 6 +++--- Creational/Singleton/README.rst | 6 +++--- More/Delegation/README.rst | 6 +++--- More/ServiceLocator/README.rst | 6 +++--- Structural/Adapter/README.rst | 6 +++--- Structural/Bridge/README.rst | 8 ++++---- Structural/Composite/README.rst | 6 +++--- Structural/DataMapper/README.rst | 6 +++--- Structural/Decorator/README.rst | 6 +++--- Structural/DependencyInjection/README.rst | 6 +++--- Structural/Facade/README.rst | 6 +++--- Structural/FluentInterface/README.rst | 7 +++---- Structural/Proxy/README.rst | 6 +++--- Structural/Registry/README.rst | 6 +++--- 30 files changed, 91 insertions(+), 92 deletions(-) diff --git a/Behavioral/ChainOfResponsibilities/README.rst b/Behavioral/ChainOfResponsibilities/README.rst index 06a828c..b3f47b9 100644 --- a/Behavioral/ChainOfResponsibilities/README.rst +++ b/Behavioral/ChainOfResponsibilities/README.rst @@ -1,5 +1,5 @@ -`Chain Of Responsibilities`_ -============================ +`Chain Of Responsibilities`__ +============================= Purpose: -------- @@ -67,4 +67,4 @@ Tests/ChainTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/ChainOfResponsibilities -.. _`Chain Of Responsibilities`: http://en.wikipedia.org/wiki/Chain_of_responsibility_pattern \ No newline at end of file +.. __: http://en.wikipedia.org/wiki/Chain_of_responsibility_pattern \ No newline at end of file diff --git a/Behavioral/Command/README.rst b/Behavioral/Command/README.rst index 2bcf1d4..ddd2164 100644 --- a/Behavioral/Command/README.rst +++ b/Behavioral/Command/README.rst @@ -1,5 +1,5 @@ -`Command`_ -========== +`Command`__ +=========== Purpose ------- @@ -74,4 +74,4 @@ Tests/CommandTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Command -.. _`Command`: http://en.wikipedia.org/wiki/Command_pattern \ No newline at end of file +.. __: http://en.wikipedia.org/wiki/Command_pattern \ No newline at end of file diff --git a/Behavioral/Iterator/README.rst b/Behavioral/Iterator/README.rst index dbe1199..9398350 100644 --- a/Behavioral/Iterator/README.rst +++ b/Behavioral/Iterator/README.rst @@ -1,5 +1,5 @@ -`Iterator`_ -=========== +`Iterator`__ +============ Purpose ------- @@ -67,4 +67,4 @@ Tests/IteratorTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Iterator -.. _`Iterator`: http://en.wikipedia.org/wiki/Iterator_pattern \ No newline at end of file +.. __: http://en.wikipedia.org/wiki/Iterator_pattern \ No newline at end of file diff --git a/Behavioral/Mediator/README.rst b/Behavioral/Mediator/README.rst index 05277dc..1a596d7 100644 --- a/Behavioral/Mediator/README.rst +++ b/Behavioral/Mediator/README.rst @@ -1,5 +1,5 @@ -`Mediator`_ -=========== +`Mediator`__ +============ Purpose ------- @@ -70,4 +70,4 @@ Tests/MediatorTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Mediator -.. _`Mediator`: http://en.wikipedia.org/wiki/Mediator_pattern \ No newline at end of file +.. __: http://en.wikipedia.org/wiki/Mediator_pattern \ No newline at end of file diff --git a/Behavioral/Memento/README.rst b/Behavioral/Memento/README.rst index a9b86c7..6696149 100644 --- a/Behavioral/Memento/README.rst +++ b/Behavioral/Memento/README.rst @@ -1,5 +1,5 @@ -`Memento`_ -========== +`Memento`__ +=========== Purpose ------- @@ -65,4 +65,4 @@ Tests/MementoTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Memento -.. _`Memento`: http://en.wikipedia.org/wiki/Memento_pattern \ No newline at end of file +.. __: http://en.wikipedia.org/wiki/Memento_pattern \ No newline at end of file diff --git a/Behavioral/NullObject/README.rst b/Behavioral/NullObject/README.rst index 187b621..ad7719c 100644 --- a/Behavioral/NullObject/README.rst +++ b/Behavioral/NullObject/README.rst @@ -1,5 +1,5 @@ -`Null Object`_ -============== +`Null Object`__ +=============== Purpose ------- @@ -72,4 +72,4 @@ Tests/LoggerTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/NullObject -.. _`Null Object`: http://en.wikipedia.org/wiki/Null_Object_pattern \ No newline at end of file +.. __: http://en.wikipedia.org/wiki/Null_Object_pattern \ No newline at end of file diff --git a/Behavioral/Observer/README.rst b/Behavioral/Observer/README.rst index 9a6a230..53398c2 100644 --- a/Behavioral/Observer/README.rst +++ b/Behavioral/Observer/README.rst @@ -1,5 +1,5 @@ -`Observer`_ -=========== +`Observer`__ +============ Purpose ------- @@ -55,4 +55,4 @@ Tests/ObserverTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Observer -.. _`Observer`: http://en.wikipedia.org/wiki/Observer_pattern \ No newline at end of file +.. __: http://en.wikipedia.org/wiki/Observer_pattern \ No newline at end of file diff --git a/Behavioral/Specification/README.rst b/Behavioral/Specification/README.rst index e12c24a..b6957e0 100644 --- a/Behavioral/Specification/README.rst +++ b/Behavioral/Specification/README.rst @@ -1,5 +1,5 @@ -`Specification`_ -================ +`Specification`__ +================= Purpose ------- @@ -78,4 +78,4 @@ Tests/SpecificationTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Specification -.. _`Specification`: http://en.wikipedia.org/wiki/Specification_pattern +.. __: http://en.wikipedia.org/wiki/Specification_pattern diff --git a/Behavioral/State/README.rst b/Behavioral/State/README.rst index f5a2b19..3722d92 100644 --- a/Behavioral/State/README.rst +++ b/Behavioral/State/README.rst @@ -1,5 +1,5 @@ -`State`_ -======== +`State`__ +========= Purpose ------- @@ -54,4 +54,4 @@ Test ---- .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/State -.. _`State`: http://en.wikipedia.org/wiki/State_pattern \ No newline at end of file +.. __: http://en.wikipedia.org/wiki/State_pattern \ No newline at end of file diff --git a/Behavioral/Strategy/README.rst b/Behavioral/Strategy/README.rst index 940c716..c3ced8f 100644 --- a/Behavioral/Strategy/README.rst +++ b/Behavioral/Strategy/README.rst @@ -1,5 +1,5 @@ -`Strategy`_ -=========== +`Strategy`__ +============ Terminology: ------------ @@ -68,4 +68,4 @@ Tests/StrategyTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Strategy -.. _`Strategy`: http://en.wikipedia.org/wiki/Strategy_pattern \ No newline at end of file +.. __: http://en.wikipedia.org/wiki/Strategy_pattern \ No newline at end of file diff --git a/Behavioral/TemplateMethod/README.rst b/Behavioral/TemplateMethod/README.rst index 0397753..559cd36 100644 --- a/Behavioral/TemplateMethod/README.rst +++ b/Behavioral/TemplateMethod/README.rst @@ -1,5 +1,5 @@ -`Template Method`_ -================== +`Template Method`__ +=================== Purpose ------- @@ -61,4 +61,4 @@ Tests/JourneyTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/TemplateMethod -.. _`Template Method`: http://en.wikipedia.org/wiki/Template_method_pattern \ No newline at end of file +.. __: http://en.wikipedia.org/wiki/Template_method_pattern \ No newline at end of file diff --git a/Behavioral/Visitor/README.rst b/Behavioral/Visitor/README.rst index 3d88f0d..ba256b9 100644 --- a/Behavioral/Visitor/README.rst +++ b/Behavioral/Visitor/README.rst @@ -1,5 +1,5 @@ -`Visitor`_ -========== +`Visitor`__ +=========== Purpose ------- @@ -65,4 +65,4 @@ Tests/VisitorTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Visitor -.. _`Visitor`: http://en.wikipedia.org/wiki/Visitor_pattern \ No newline at end of file +.. __: http://en.wikipedia.org/wiki/Visitor_pattern \ No newline at end of file diff --git a/Creational/AbstractFactory/README.rst b/Creational/AbstractFactory/README.rst index 3e6d7ef..69980eb 100644 --- a/Creational/AbstractFactory/README.rst +++ b/Creational/AbstractFactory/README.rst @@ -1,5 +1,5 @@ -`Abstract Factory`_ -=================== +`Abstract Factory`__ +==================== Purpose ------- @@ -91,4 +91,4 @@ Tests/AbstractFactoryTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/AbstractFactory -.. _`Abstract Factory`: http://en.wikipedia.org/wiki/Abstract_factory_pattern +.. __: http://en.wikipedia.org/wiki/Abstract_factory_pattern diff --git a/Creational/Builder/README.rst b/Creational/Builder/README.rst index 85b38ea..de8971b 100644 --- a/Creational/Builder/README.rst +++ b/Creational/Builder/README.rst @@ -1,5 +1,5 @@ -`Builder`_ -========== +`Builder`__ +=========== Purpose ------- @@ -102,4 +102,4 @@ Tests/DirectorTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/Builder -.. _`Builder`: http://en.wikipedia.org/wiki/Builder_pattern +.. __: http://en.wikipedia.org/wiki/Builder_pattern diff --git a/Creational/FactoryMethod/README.rst b/Creational/FactoryMethod/README.rst index 6ec224e..7e69a8d 100644 --- a/Creational/FactoryMethod/README.rst +++ b/Creational/FactoryMethod/README.rst @@ -1,5 +1,5 @@ -`Factory Method`_ -================= +`Factory Method`__ +================== Purpose ------- @@ -80,4 +80,4 @@ Tests/FactoryMethodTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/FactoryMethod -.. _`Factory Method`: http://en.wikipedia.org/wiki/Factory_method_pattern +.. __: http://en.wikipedia.org/wiki/Factory_method_pattern diff --git a/Creational/Pool/README.rst b/Creational/Pool/README.rst index 260d3b0..7b97b9b 100644 --- a/Creational/Pool/README.rst +++ b/Creational/Pool/README.rst @@ -1,5 +1,5 @@ -`Pool`_ -======= +`Pool`__ +======== The **object pool pattern** is a software creational design pattern that uses a set of initialized objects kept ready to use – a "pool" – rather @@ -67,4 +67,4 @@ Tests/TestWorker.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/Pool -.. _`Pool`: http://en.wikipedia.org/wiki/Object_pool_pattern +.. __: http://en.wikipedia.org/wiki/Object_pool_pattern diff --git a/Creational/Prototype/README.rst b/Creational/Prototype/README.rst index 64c558d..af38f8f 100644 --- a/Creational/Prototype/README.rst +++ b/Creational/Prototype/README.rst @@ -1,5 +1,5 @@ -`Prototype`_ -============ +`Prototype`__ +============= Purpose ------- @@ -53,4 +53,4 @@ Test ---- .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/Prototype -.. _`Prototype`: http://en.wikipedia.org/wiki/Prototype_pattern +.. __: http://en.wikipedia.org/wiki/Prototype_pattern diff --git a/Creational/Singleton/README.rst b/Creational/Singleton/README.rst index 4ec37ae..c8aad42 100644 --- a/Creational/Singleton/README.rst +++ b/Creational/Singleton/README.rst @@ -1,5 +1,5 @@ -`Singleton`_ -============ +`Singleton`__ +============= **THIS IS CONSIDERED TO BE AN ANTI-PATTERN! FOR BETTER TESTABILITY AND MAINTAINABILITY USE DEPENDENCY INJECTION!** @@ -47,4 +47,4 @@ Tests/SingletonTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Creational/Singleton -.. _`Singleton`: http://en.wikipedia.org/wiki/Singleton_pattern +.. __: http://en.wikipedia.org/wiki/Singleton_pattern diff --git a/More/Delegation/README.rst b/More/Delegation/README.rst index 51b05fc..b6172c6 100644 --- a/More/Delegation/README.rst +++ b/More/Delegation/README.rst @@ -1,5 +1,5 @@ -`Delegation`_ -============= +`Delegation`__ +============== Purpose ------- @@ -51,4 +51,4 @@ Tests/DelegationTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/More/Delegation -.. _`Delegation`: http://en.wikipedia.org/wiki/Delegation_pattern +.. __: http://en.wikipedia.org/wiki/Delegation_pattern diff --git a/More/ServiceLocator/README.rst b/More/ServiceLocator/README.rst index 1ffa792..bfeb1a9 100644 --- a/More/ServiceLocator/README.rst +++ b/More/ServiceLocator/README.rst @@ -1,5 +1,5 @@ -`Service Locator`_ -================== +`Service Locator`__ +=================== Purpose ------- @@ -81,4 +81,4 @@ Tests/ServiceLocatorTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/More/ServiceLocator -.. _`Service Locator`: http://en.wikipedia.org/wiki/Service_locator_pattern +.. __: http://en.wikipedia.org/wiki/Service_locator_pattern diff --git a/Structural/Adapter/README.rst b/Structural/Adapter/README.rst index dacd97e..1de8425 100644 --- a/Structural/Adapter/README.rst +++ b/Structural/Adapter/README.rst @@ -1,5 +1,5 @@ -`Adapter / Wrapper`_ -==================== +`Adapter / Wrapper`__ +===================== Purpose ------- @@ -68,4 +68,4 @@ Tests/AdapterTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Adapter -.. _`Adapter / Wrapper`: http://en.wikipedia.org/wiki/Adapter_pattern +.. __: http://en.wikipedia.org/wiki/Adapter_pattern diff --git a/Structural/Bridge/README.rst b/Structural/Bridge/README.rst index b92fd1c..f9b9551 100644 --- a/Structural/Bridge/README.rst +++ b/Structural/Bridge/README.rst @@ -1,11 +1,11 @@ -`Bridge`_ -========= +`Bridge`__ +========== Purpose ------- Decouple an abstraction from its implementation so that the two can vary -independently. (http://en.wikipedia.org/wiki/Bridge\_pattern) +independently. Sample: ^^^^^^^ @@ -71,4 +71,4 @@ Tests/BridgeTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Bridge -.. _`Bridge`: http://en.wikipedia.org/wiki/Bridge_pattern +.. __: http://en.wikipedia.org/wiki/Bridge_pattern diff --git a/Structural/Composite/README.rst b/Structural/Composite/README.rst index 432647e..66d8f16 100644 --- a/Structural/Composite/README.rst +++ b/Structural/Composite/README.rst @@ -1,5 +1,5 @@ -`Composite`_ -============ +`Composite`__ +============= Purpose ------- @@ -62,4 +62,4 @@ Tests/CompositeTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Composite -.. _`Composite`: http://en.wikipedia.org/wiki/Composite_pattern +.. __: http://en.wikipedia.org/wiki/Composite_pattern diff --git a/Structural/DataMapper/README.rst b/Structural/DataMapper/README.rst index 7fca1e9..5180243 100644 --- a/Structural/DataMapper/README.rst +++ b/Structural/DataMapper/README.rst @@ -1,5 +1,5 @@ -`Data Mapper`_ -============== +`Data Mapper`__ +=============== Purpose ------- @@ -57,4 +57,4 @@ Tests/DataMapperTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/DataMapper -.. _`Data Mapper`: http://en.wikipedia.org/wiki/Data_mapper_pattern +.. __: http://en.wikipedia.org/wiki/Data_mapper_pattern diff --git a/Structural/Decorator/README.rst b/Structural/Decorator/README.rst index b40ac69..b57a608 100644 --- a/Structural/Decorator/README.rst +++ b/Structural/Decorator/README.rst @@ -1,5 +1,5 @@ -`Decorator`_ -============ +`Decorator`__ +============= Purpose ------- @@ -65,4 +65,4 @@ Tests/DecoratorTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Decorator -.. _`Decorator`: http://en.wikipedia.org/wiki/Decorator_pattern +.. __: http://en.wikipedia.org/wiki/Decorator_pattern diff --git a/Structural/DependencyInjection/README.rst b/Structural/DependencyInjection/README.rst index 2446c2c..7e979b5 100644 --- a/Structural/DependencyInjection/README.rst +++ b/Structural/DependencyInjection/README.rst @@ -1,5 +1,5 @@ -`Dependency Injection`_ -======================= +`Dependency Injection`__ +======================== Purpose ------- @@ -85,4 +85,4 @@ Tests/config.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/DependencyInjection -.. _`Dependency Injection`: http://en.wikipedia.org/wiki/Dependency_injection +.. __: http://en.wikipedia.org/wiki/Dependency_injection diff --git a/Structural/Facade/README.rst b/Structural/Facade/README.rst index 1148b5e..da20b13 100644 --- a/Structural/Facade/README.rst +++ b/Structural/Facade/README.rst @@ -1,5 +1,5 @@ -`Facade`_ -========= +`Facade`__ +========== Purpose ------- @@ -63,4 +63,4 @@ Tests/FacadeTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Facade -.. _`Facade`: http://en.wikipedia.org/wiki/Facade_pattern +.. __: http://en.wikipedia.org/wiki/Facade_pattern diff --git a/Structural/FluentInterface/README.rst b/Structural/FluentInterface/README.rst index a1dd9c8..2fcef3b 100644 --- a/Structural/FluentInterface/README.rst +++ b/Structural/FluentInterface/README.rst @@ -1,5 +1,5 @@ -`Fluent Interface`_ -=================== +`Fluent Interface`__ +==================== Purpose ------- @@ -43,5 +43,4 @@ Tests/FluentInterfaceTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/FluentInterface - -.. _`Fluent Interface`: http://en.wikipedia.org/wiki/Fluent_interface \ No newline at end of file +.. __: http://en.wikipedia.org/wiki/Fluent_interface \ No newline at end of file diff --git a/Structural/Proxy/README.rst b/Structural/Proxy/README.rst index b60baea..e65475b 100644 --- a/Structural/Proxy/README.rst +++ b/Structural/Proxy/README.rst @@ -1,5 +1,5 @@ -`Proxy`_ -======== +`Proxy`__ +========= Purpose ------- @@ -41,4 +41,4 @@ Test ---- .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Proxy -.. _`Proxy`: http://en.wikipedia.org/wiki/Proxy_pattern +.. __: http://en.wikipedia.org/wiki/Proxy_pattern diff --git a/Structural/Registry/README.rst b/Structural/Registry/README.rst index e95ed26..9de8029 100644 --- a/Structural/Registry/README.rst +++ b/Structural/Registry/README.rst @@ -1,5 +1,5 @@ -`Registry`_ -=========== +`Registry`__ +============ Purpose ------- @@ -44,4 +44,4 @@ Tests/RegistryTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Structural/Registry -.. _`Registry`: http://en.wikipedia.org/wiki/Service_locator_pattern +.. __: http://en.wikipedia.org/wiki/Service_locator_pattern From ca591f9286fa8854911b005fa0717e298ce518a3 Mon Sep 17 00:00:00 2001 From: Faust Date: Fri, 29 May 2015 12:20:31 +0200 Subject: [PATCH 029/127] use Anonymous Hyperlinks for wikipedia link --- .../Behavioral/ChainOfResponsibilities/README.po | 4 ++-- locale/ca/LC_MESSAGES/Behavioral/Command/README.po | 4 ++-- locale/ca/LC_MESSAGES/Behavioral/Iterator/README.po | 4 ++-- locale/ca/LC_MESSAGES/Behavioral/Mediator/README.po | 4 ++-- locale/ca/LC_MESSAGES/Behavioral/Memento/README.po | 4 ++-- locale/ca/LC_MESSAGES/Behavioral/NullObject/README.po | 4 ++-- locale/ca/LC_MESSAGES/Behavioral/Observer/README.po | 4 ++-- locale/ca/LC_MESSAGES/Behavioral/README.po | 2 +- locale/ca/LC_MESSAGES/Behavioral/Specification/README.po | 4 ++-- locale/ca/LC_MESSAGES/Behavioral/State/README.po | 4 ++-- locale/ca/LC_MESSAGES/Behavioral/Strategy/README.po | 4 ++-- locale/ca/LC_MESSAGES/Behavioral/TemplateMethod/README.po | 4 ++-- locale/ca/LC_MESSAGES/Behavioral/Visitor/README.po | 4 ++-- locale/ca/LC_MESSAGES/Creational/AbstractFactory/README.po | 4 ++-- locale/ca/LC_MESSAGES/Creational/Builder/README.po | 4 ++-- locale/ca/LC_MESSAGES/Creational/FactoryMethod/README.po | 4 ++-- locale/ca/LC_MESSAGES/Creational/Multiton/README.po | 2 +- locale/ca/LC_MESSAGES/Creational/Pool/README.po | 4 ++-- locale/ca/LC_MESSAGES/Creational/Prototype/README.po | 4 ++-- locale/ca/LC_MESSAGES/Creational/README.po | 2 +- locale/ca/LC_MESSAGES/Creational/SimpleFactory/README.po | 2 +- locale/ca/LC_MESSAGES/Creational/Singleton/README.po | 4 ++-- locale/ca/LC_MESSAGES/Creational/StaticFactory/README.po | 2 +- locale/ca/LC_MESSAGES/More/Delegation/README.po | 4 ++-- locale/ca/LC_MESSAGES/More/README.po | 2 +- locale/ca/LC_MESSAGES/More/Repository/README.po | 2 +- locale/ca/LC_MESSAGES/More/ServiceLocator/README.po | 4 ++-- locale/ca/LC_MESSAGES/README.po | 2 +- locale/ca/LC_MESSAGES/Structural/Adapter/README.po | 4 ++-- locale/ca/LC_MESSAGES/Structural/Bridge/README.po | 6 +++--- locale/ca/LC_MESSAGES/Structural/Composite/README.po | 4 ++-- locale/ca/LC_MESSAGES/Structural/DataMapper/README.po | 4 ++-- locale/ca/LC_MESSAGES/Structural/Decorator/README.po | 4 ++-- .../ca/LC_MESSAGES/Structural/DependencyInjection/README.po | 4 ++-- locale/ca/LC_MESSAGES/Structural/Facade/README.po | 4 ++-- locale/ca/LC_MESSAGES/Structural/FluentInterface/README.po | 4 ++-- locale/ca/LC_MESSAGES/Structural/Proxy/README.po | 4 ++-- locale/ca/LC_MESSAGES/Structural/README.po | 2 +- locale/ca/LC_MESSAGES/Structural/Registry/README.po | 4 ++-- .../Behavioral/ChainOfResponsibilities/README.po | 4 ++-- locale/es/LC_MESSAGES/Behavioral/Command/README.po | 4 ++-- locale/es/LC_MESSAGES/Behavioral/Iterator/README.po | 4 ++-- locale/es/LC_MESSAGES/Behavioral/Mediator/README.po | 4 ++-- locale/es/LC_MESSAGES/Behavioral/Memento/README.po | 4 ++-- locale/es/LC_MESSAGES/Behavioral/NullObject/README.po | 4 ++-- locale/es/LC_MESSAGES/Behavioral/Observer/README.po | 4 ++-- locale/es/LC_MESSAGES/Behavioral/README.po | 2 +- locale/es/LC_MESSAGES/Behavioral/Specification/README.po | 4 ++-- locale/es/LC_MESSAGES/Behavioral/State/README.po | 4 ++-- locale/es/LC_MESSAGES/Behavioral/Strategy/README.po | 4 ++-- locale/es/LC_MESSAGES/Behavioral/TemplateMethod/README.po | 4 ++-- locale/es/LC_MESSAGES/Behavioral/Visitor/README.po | 4 ++-- locale/es/LC_MESSAGES/Creational/AbstractFactory/README.po | 4 ++-- locale/es/LC_MESSAGES/Creational/Builder/README.po | 4 ++-- locale/es/LC_MESSAGES/Creational/FactoryMethod/README.po | 4 ++-- locale/es/LC_MESSAGES/Creational/Multiton/README.po | 2 +- locale/es/LC_MESSAGES/Creational/Pool/README.po | 4 ++-- locale/es/LC_MESSAGES/Creational/Prototype/README.po | 4 ++-- locale/es/LC_MESSAGES/Creational/README.po | 2 +- locale/es/LC_MESSAGES/Creational/SimpleFactory/README.po | 2 +- locale/es/LC_MESSAGES/Creational/Singleton/README.po | 4 ++-- locale/es/LC_MESSAGES/Creational/StaticFactory/README.po | 2 +- locale/es/LC_MESSAGES/More/Delegation/README.po | 4 ++-- locale/es/LC_MESSAGES/More/README.po | 2 +- locale/es/LC_MESSAGES/More/Repository/README.po | 2 +- locale/es/LC_MESSAGES/More/ServiceLocator/README.po | 4 ++-- locale/es/LC_MESSAGES/README.po | 2 +- locale/es/LC_MESSAGES/Structural/Adapter/README.po | 4 ++-- locale/es/LC_MESSAGES/Structural/Bridge/README.po | 6 +++--- locale/es/LC_MESSAGES/Structural/Composite/README.po | 4 ++-- locale/es/LC_MESSAGES/Structural/DataMapper/README.po | 4 ++-- locale/es/LC_MESSAGES/Structural/Decorator/README.po | 4 ++-- .../es/LC_MESSAGES/Structural/DependencyInjection/README.po | 4 ++-- locale/es/LC_MESSAGES/Structural/Facade/README.po | 4 ++-- locale/es/LC_MESSAGES/Structural/FluentInterface/README.po | 4 ++-- locale/es/LC_MESSAGES/Structural/Proxy/README.po | 4 ++-- locale/es/LC_MESSAGES/Structural/README.po | 2 +- locale/es/LC_MESSAGES/Structural/Registry/README.po | 4 ++-- .../Behavioral/ChainOfResponsibilities/README.po | 4 ++-- locale/pt_BR/LC_MESSAGES/Behavioral/Command/README.po | 4 ++-- locale/pt_BR/LC_MESSAGES/Behavioral/Iterator/README.po | 4 ++-- locale/pt_BR/LC_MESSAGES/Behavioral/Mediator/README.po | 4 ++-- locale/pt_BR/LC_MESSAGES/Behavioral/Memento/README.po | 4 ++-- locale/pt_BR/LC_MESSAGES/Behavioral/NullObject/README.po | 4 ++-- locale/pt_BR/LC_MESSAGES/Behavioral/Observer/README.po | 4 ++-- locale/pt_BR/LC_MESSAGES/Behavioral/README.po | 2 +- locale/pt_BR/LC_MESSAGES/Behavioral/Specification/README.po | 4 ++-- locale/pt_BR/LC_MESSAGES/Behavioral/State/README.po | 4 ++-- locale/pt_BR/LC_MESSAGES/Behavioral/Strategy/README.po | 4 ++-- .../pt_BR/LC_MESSAGES/Behavioral/TemplateMethod/README.po | 4 ++-- locale/pt_BR/LC_MESSAGES/Behavioral/Visitor/README.po | 4 ++-- .../pt_BR/LC_MESSAGES/Creational/AbstractFactory/README.po | 4 ++-- locale/pt_BR/LC_MESSAGES/Creational/Builder/README.po | 4 ++-- locale/pt_BR/LC_MESSAGES/Creational/FactoryMethod/README.po | 4 ++-- locale/pt_BR/LC_MESSAGES/Creational/Multiton/README.po | 2 +- locale/pt_BR/LC_MESSAGES/Creational/Pool/README.po | 4 ++-- locale/pt_BR/LC_MESSAGES/Creational/Prototype/README.po | 4 ++-- locale/pt_BR/LC_MESSAGES/Creational/README.po | 2 +- locale/pt_BR/LC_MESSAGES/Creational/SimpleFactory/README.po | 2 +- locale/pt_BR/LC_MESSAGES/Creational/Singleton/README.po | 4 ++-- locale/pt_BR/LC_MESSAGES/Creational/StaticFactory/README.po | 2 +- locale/pt_BR/LC_MESSAGES/More/Delegation/README.po | 4 ++-- locale/pt_BR/LC_MESSAGES/More/README.po | 2 +- locale/pt_BR/LC_MESSAGES/More/Repository/README.po | 2 +- locale/pt_BR/LC_MESSAGES/More/ServiceLocator/README.po | 4 ++-- locale/pt_BR/LC_MESSAGES/README.po | 2 +- locale/pt_BR/LC_MESSAGES/Structural/Adapter/README.po | 4 ++-- locale/pt_BR/LC_MESSAGES/Structural/Bridge/README.po | 6 +++--- locale/pt_BR/LC_MESSAGES/Structural/Composite/README.po | 4 ++-- locale/pt_BR/LC_MESSAGES/Structural/DataMapper/README.po | 4 ++-- locale/pt_BR/LC_MESSAGES/Structural/Decorator/README.po | 4 ++-- .../LC_MESSAGES/Structural/DependencyInjection/README.po | 4 ++-- locale/pt_BR/LC_MESSAGES/Structural/Facade/README.po | 4 ++-- .../pt_BR/LC_MESSAGES/Structural/FluentInterface/README.po | 4 ++-- locale/pt_BR/LC_MESSAGES/Structural/Proxy/README.po | 4 ++-- locale/pt_BR/LC_MESSAGES/Structural/README.po | 2 +- locale/pt_BR/LC_MESSAGES/Structural/Registry/README.po | 4 ++-- .../Behavioral/ChainOfResponsibilities/README.po | 4 ++-- locale/ru/LC_MESSAGES/Behavioral/Command/README.po | 4 ++-- locale/ru/LC_MESSAGES/Behavioral/Iterator/README.po | 4 ++-- locale/ru/LC_MESSAGES/Behavioral/Mediator/README.po | 4 ++-- locale/ru/LC_MESSAGES/Behavioral/Memento/README.po | 4 ++-- locale/ru/LC_MESSAGES/Behavioral/NullObject/README.po | 4 ++-- locale/ru/LC_MESSAGES/Behavioral/Observer/README.po | 4 ++-- locale/ru/LC_MESSAGES/Behavioral/README.po | 2 +- locale/ru/LC_MESSAGES/Behavioral/Specification/README.po | 4 ++-- locale/ru/LC_MESSAGES/Behavioral/State/README.po | 4 ++-- locale/ru/LC_MESSAGES/Behavioral/Strategy/README.po | 4 ++-- locale/ru/LC_MESSAGES/Behavioral/TemplateMethod/README.po | 4 ++-- locale/ru/LC_MESSAGES/Behavioral/Visitor/README.po | 4 ++-- locale/ru/LC_MESSAGES/Creational/AbstractFactory/README.po | 4 ++-- locale/ru/LC_MESSAGES/Creational/Builder/README.po | 4 ++-- locale/ru/LC_MESSAGES/Creational/FactoryMethod/README.po | 4 ++-- locale/ru/LC_MESSAGES/Creational/Multiton/README.po | 2 +- locale/ru/LC_MESSAGES/Creational/Pool/README.po | 4 ++-- locale/ru/LC_MESSAGES/Creational/Prototype/README.po | 4 ++-- locale/ru/LC_MESSAGES/Creational/README.po | 2 +- locale/ru/LC_MESSAGES/Creational/SimpleFactory/README.po | 2 +- locale/ru/LC_MESSAGES/Creational/Singleton/README.po | 4 ++-- locale/ru/LC_MESSAGES/Creational/StaticFactory/README.po | 2 +- locale/ru/LC_MESSAGES/More/Delegation/README.po | 4 ++-- locale/ru/LC_MESSAGES/More/README.po | 2 +- locale/ru/LC_MESSAGES/More/Repository/README.po | 2 +- locale/ru/LC_MESSAGES/More/ServiceLocator/README.po | 4 ++-- locale/ru/LC_MESSAGES/README.po | 2 +- locale/ru/LC_MESSAGES/Structural/Adapter/README.po | 4 ++-- locale/ru/LC_MESSAGES/Structural/Bridge/README.po | 6 +++--- locale/ru/LC_MESSAGES/Structural/Composite/README.po | 4 ++-- locale/ru/LC_MESSAGES/Structural/DataMapper/README.po | 4 ++-- locale/ru/LC_MESSAGES/Structural/Decorator/README.po | 4 ++-- .../ru/LC_MESSAGES/Structural/DependencyInjection/README.po | 4 ++-- locale/ru/LC_MESSAGES/Structural/Facade/README.po | 4 ++-- locale/ru/LC_MESSAGES/Structural/FluentInterface/README.po | 4 ++-- locale/ru/LC_MESSAGES/Structural/Proxy/README.po | 4 ++-- locale/ru/LC_MESSAGES/Structural/README.po | 2 +- locale/ru/LC_MESSAGES/Structural/Registry/README.po | 4 ++-- 156 files changed, 280 insertions(+), 280 deletions(-) diff --git a/locale/ca/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po b/locale/ca/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po index 5441787..b5277a5 100644 --- a/locale/ca/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po +++ b/locale/ca/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/ChainOfResponsibilities/README.rst:2 -msgid "`Chain Of Responsibilities`_" +msgid "`Chain Of Responsibilities`__" msgstr "" #: ../../Behavioral/ChainOfResponsibilities/README.rst:5 diff --git a/locale/ca/LC_MESSAGES/Behavioral/Command/README.po b/locale/ca/LC_MESSAGES/Behavioral/Command/README.po index 34ee70f..29319a3 100644 --- a/locale/ca/LC_MESSAGES/Behavioral/Command/README.po +++ b/locale/ca/LC_MESSAGES/Behavioral/Command/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Command/README.rst:2 -msgid "`Command`_" +msgid "`Command`__" msgstr "" #: ../../Behavioral/Command/README.rst:5 diff --git a/locale/ca/LC_MESSAGES/Behavioral/Iterator/README.po b/locale/ca/LC_MESSAGES/Behavioral/Iterator/README.po index 2a298e9..3000658 100644 --- a/locale/ca/LC_MESSAGES/Behavioral/Iterator/README.po +++ b/locale/ca/LC_MESSAGES/Behavioral/Iterator/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Iterator/README.rst:2 -msgid "`Iterator`_" +msgid "`Iterator`__" msgstr "" #: ../../Behavioral/Iterator/README.rst:5 diff --git a/locale/ca/LC_MESSAGES/Behavioral/Mediator/README.po b/locale/ca/LC_MESSAGES/Behavioral/Mediator/README.po index f2e9514..9c6694b 100644 --- a/locale/ca/LC_MESSAGES/Behavioral/Mediator/README.po +++ b/locale/ca/LC_MESSAGES/Behavioral/Mediator/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Mediator/README.rst:2 -msgid "`Mediator`_" +msgid "`Mediator`__" msgstr "" #: ../../Behavioral/Mediator/README.rst:5 diff --git a/locale/ca/LC_MESSAGES/Behavioral/Memento/README.po b/locale/ca/LC_MESSAGES/Behavioral/Memento/README.po index 9ac83df..913069a 100644 --- a/locale/ca/LC_MESSAGES/Behavioral/Memento/README.po +++ b/locale/ca/LC_MESSAGES/Behavioral/Memento/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Memento/README.rst:2 -msgid "`Memento`_" +msgid "`Memento`__" msgstr "" #: ../../Behavioral/Memento/README.rst:5 diff --git a/locale/ca/LC_MESSAGES/Behavioral/NullObject/README.po b/locale/ca/LC_MESSAGES/Behavioral/NullObject/README.po index 28e1eea..35b77f6 100644 --- a/locale/ca/LC_MESSAGES/Behavioral/NullObject/README.po +++ b/locale/ca/LC_MESSAGES/Behavioral/NullObject/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/NullObject/README.rst:2 -msgid "`Null Object`_" +msgid "`Null Object`__" msgstr "" #: ../../Behavioral/NullObject/README.rst:5 diff --git a/locale/ca/LC_MESSAGES/Behavioral/Observer/README.po b/locale/ca/LC_MESSAGES/Behavioral/Observer/README.po index 84dd8a9..6aea8e9 100644 --- a/locale/ca/LC_MESSAGES/Behavioral/Observer/README.po +++ b/locale/ca/LC_MESSAGES/Behavioral/Observer/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Observer/README.rst:2 -msgid "`Observer`_" +msgid "`Observer`__" msgstr "" #: ../../Behavioral/Observer/README.rst:5 diff --git a/locale/ca/LC_MESSAGES/Behavioral/README.po b/locale/ca/LC_MESSAGES/Behavioral/README.po index d773162..bd66758 100644 --- a/locale/ca/LC_MESSAGES/Behavioral/README.po +++ b/locale/ca/LC_MESSAGES/Behavioral/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/ca/LC_MESSAGES/Behavioral/Specification/README.po b/locale/ca/LC_MESSAGES/Behavioral/Specification/README.po index 79bcea6..54e3b64 100644 --- a/locale/ca/LC_MESSAGES/Behavioral/Specification/README.po +++ b/locale/ca/LC_MESSAGES/Behavioral/Specification/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Specification/README.rst:2 -msgid "`Specification`_" +msgid "`Specification`__" msgstr "" #: ../../Behavioral/Specification/README.rst:5 diff --git a/locale/ca/LC_MESSAGES/Behavioral/State/README.po b/locale/ca/LC_MESSAGES/Behavioral/State/README.po index a6ed567..f71fbfa 100644 --- a/locale/ca/LC_MESSAGES/Behavioral/State/README.po +++ b/locale/ca/LC_MESSAGES/Behavioral/State/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/State/README.rst:2 -msgid "`State`_" +msgid "`State`__" msgstr "" #: ../../Behavioral/State/README.rst:5 diff --git a/locale/ca/LC_MESSAGES/Behavioral/Strategy/README.po b/locale/ca/LC_MESSAGES/Behavioral/Strategy/README.po index 83278ed..dd5797e 100644 --- a/locale/ca/LC_MESSAGES/Behavioral/Strategy/README.po +++ b/locale/ca/LC_MESSAGES/Behavioral/Strategy/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Strategy/README.rst:2 -msgid "`Strategy`_" +msgid "`Strategy`__" msgstr "" #: ../../Behavioral/Strategy/README.rst:5 diff --git a/locale/ca/LC_MESSAGES/Behavioral/TemplateMethod/README.po b/locale/ca/LC_MESSAGES/Behavioral/TemplateMethod/README.po index 4fea331..4f6fa81 100644 --- a/locale/ca/LC_MESSAGES/Behavioral/TemplateMethod/README.po +++ b/locale/ca/LC_MESSAGES/Behavioral/TemplateMethod/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/TemplateMethod/README.rst:2 -msgid "`Template Method`_" +msgid "`Template Method`__" msgstr "" #: ../../Behavioral/TemplateMethod/README.rst:5 diff --git a/locale/ca/LC_MESSAGES/Behavioral/Visitor/README.po b/locale/ca/LC_MESSAGES/Behavioral/Visitor/README.po index 1664fe3..cab0ea9 100644 --- a/locale/ca/LC_MESSAGES/Behavioral/Visitor/README.po +++ b/locale/ca/LC_MESSAGES/Behavioral/Visitor/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Visitor/README.rst:2 -msgid "`Visitor`_" +msgid "`Visitor`__" msgstr "" #: ../../Behavioral/Visitor/README.rst:5 diff --git a/locale/ca/LC_MESSAGES/Creational/AbstractFactory/README.po b/locale/ca/LC_MESSAGES/Creational/AbstractFactory/README.po index 6213f0e..04a383e 100644 --- a/locale/ca/LC_MESSAGES/Creational/AbstractFactory/README.po +++ b/locale/ca/LC_MESSAGES/Creational/AbstractFactory/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Creational/AbstractFactory/README.rst:2 -msgid "`Abstract Factory`_" +msgid "`Abstract Factory`__" msgstr "" #: ../../Creational/AbstractFactory/README.rst:5 diff --git a/locale/ca/LC_MESSAGES/Creational/Builder/README.po b/locale/ca/LC_MESSAGES/Creational/Builder/README.po index dfb357a..79d4fe3 100644 --- a/locale/ca/LC_MESSAGES/Creational/Builder/README.po +++ b/locale/ca/LC_MESSAGES/Creational/Builder/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Creational/Builder/README.rst:2 -msgid "`Builder`_" +msgid "`Builder`__" msgstr "" #: ../../Creational/Builder/README.rst:5 diff --git a/locale/ca/LC_MESSAGES/Creational/FactoryMethod/README.po b/locale/ca/LC_MESSAGES/Creational/FactoryMethod/README.po index 29fd708..b65c56b 100644 --- a/locale/ca/LC_MESSAGES/Creational/FactoryMethod/README.po +++ b/locale/ca/LC_MESSAGES/Creational/FactoryMethod/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Creational/FactoryMethod/README.rst:2 -msgid "`Factory Method`_" +msgid "`Factory Method`__" msgstr "" #: ../../Creational/FactoryMethod/README.rst:5 diff --git a/locale/ca/LC_MESSAGES/Creational/Multiton/README.po b/locale/ca/LC_MESSAGES/Creational/Multiton/README.po index 0990e3c..702271d 100644 --- a/locale/ca/LC_MESSAGES/Creational/Multiton/README.po +++ b/locale/ca/LC_MESSAGES/Creational/Multiton/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/ca/LC_MESSAGES/Creational/Pool/README.po b/locale/ca/LC_MESSAGES/Creational/Pool/README.po index 6d829be..8defedd 100644 --- a/locale/ca/LC_MESSAGES/Creational/Pool/README.po +++ b/locale/ca/LC_MESSAGES/Creational/Pool/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Creational/Pool/README.rst:2 -msgid "`Pool`_" +msgid "`Pool`__" msgstr "" #: ../../Creational/Pool/README.rst:4 diff --git a/locale/ca/LC_MESSAGES/Creational/Prototype/README.po b/locale/ca/LC_MESSAGES/Creational/Prototype/README.po index 6cdc786..fac09ef 100644 --- a/locale/ca/LC_MESSAGES/Creational/Prototype/README.po +++ b/locale/ca/LC_MESSAGES/Creational/Prototype/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Creational/Prototype/README.rst:2 -msgid "`Prototype`_" +msgid "`Prototype`__" msgstr "" #: ../../Creational/Prototype/README.rst:5 diff --git a/locale/ca/LC_MESSAGES/Creational/README.po b/locale/ca/LC_MESSAGES/Creational/README.po index 4d9d72d..d947d57 100644 --- a/locale/ca/LC_MESSAGES/Creational/README.po +++ b/locale/ca/LC_MESSAGES/Creational/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/ca/LC_MESSAGES/Creational/SimpleFactory/README.po b/locale/ca/LC_MESSAGES/Creational/SimpleFactory/README.po index a36955e..d011ad6 100644 --- a/locale/ca/LC_MESSAGES/Creational/SimpleFactory/README.po +++ b/locale/ca/LC_MESSAGES/Creational/SimpleFactory/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/ca/LC_MESSAGES/Creational/Singleton/README.po b/locale/ca/LC_MESSAGES/Creational/Singleton/README.po index 4911734..5d108ca 100644 --- a/locale/ca/LC_MESSAGES/Creational/Singleton/README.po +++ b/locale/ca/LC_MESSAGES/Creational/Singleton/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Creational/Singleton/README.rst:2 -msgid "`Singleton`_" +msgid "`Singleton`__" msgstr "" #: ../../Creational/Singleton/README.rst:4 diff --git a/locale/ca/LC_MESSAGES/Creational/StaticFactory/README.po b/locale/ca/LC_MESSAGES/Creational/StaticFactory/README.po index 3e84e15..4a6f64e 100644 --- a/locale/ca/LC_MESSAGES/Creational/StaticFactory/README.po +++ b/locale/ca/LC_MESSAGES/Creational/StaticFactory/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/ca/LC_MESSAGES/More/Delegation/README.po b/locale/ca/LC_MESSAGES/More/Delegation/README.po index ff40269..169e8fd 100644 --- a/locale/ca/LC_MESSAGES/More/Delegation/README.po +++ b/locale/ca/LC_MESSAGES/More/Delegation/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../More/Delegation/README.rst:2 -msgid "`Delegation`_" +msgid "`Delegation`__" msgstr "" #: ../../More/Delegation/README.rst:5 diff --git a/locale/ca/LC_MESSAGES/More/README.po b/locale/ca/LC_MESSAGES/More/README.po index c4c30fe..c3585d8 100644 --- a/locale/ca/LC_MESSAGES/More/README.po +++ b/locale/ca/LC_MESSAGES/More/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/ca/LC_MESSAGES/More/Repository/README.po b/locale/ca/LC_MESSAGES/More/Repository/README.po index 4849f4f..d9ecc90 100644 --- a/locale/ca/LC_MESSAGES/More/Repository/README.po +++ b/locale/ca/LC_MESSAGES/More/Repository/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/ca/LC_MESSAGES/More/ServiceLocator/README.po b/locale/ca/LC_MESSAGES/More/ServiceLocator/README.po index 8f3537e..9808a92 100644 --- a/locale/ca/LC_MESSAGES/More/ServiceLocator/README.po +++ b/locale/ca/LC_MESSAGES/More/ServiceLocator/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../More/ServiceLocator/README.rst:2 -msgid "`Service Locator`_" +msgid "`Service Locator`__" msgstr "" #: ../../More/ServiceLocator/README.rst:5 diff --git a/locale/ca/LC_MESSAGES/README.po b/locale/ca/LC_MESSAGES/README.po index 84e21de..3a26db2 100644 --- a/locale/ca/LC_MESSAGES/README.po +++ b/locale/ca/LC_MESSAGES/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/ca/LC_MESSAGES/Structural/Adapter/README.po b/locale/ca/LC_MESSAGES/Structural/Adapter/README.po index 420b400..b351fc9 100644 --- a/locale/ca/LC_MESSAGES/Structural/Adapter/README.po +++ b/locale/ca/LC_MESSAGES/Structural/Adapter/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/Adapter/README.rst:2 -msgid "`Adapter / Wrapper`_" +msgid "`Adapter / Wrapper`__" msgstr "" #: ../../Structural/Adapter/README.rst:5 diff --git a/locale/ca/LC_MESSAGES/Structural/Bridge/README.po b/locale/ca/LC_MESSAGES/Structural/Bridge/README.po index 6e9ae00..a27619b 100644 --- a/locale/ca/LC_MESSAGES/Structural/Bridge/README.po +++ b/locale/ca/LC_MESSAGES/Structural/Bridge/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/Bridge/README.rst:2 -msgid "`Bridge`_" +msgid "`Bridge`__" msgstr "" #: ../../Structural/Bridge/README.rst:5 @@ -22,7 +22,7 @@ msgstr "" #: ../../Structural/Bridge/README.rst:7 msgid "" "Decouple an abstraction from its implementation so that the two can vary " -"independently. (http://en.wikipedia.org/wiki/Bridge\\_pattern)" +"independently." msgstr "" #: ../../Structural/Bridge/README.rst:11 diff --git a/locale/ca/LC_MESSAGES/Structural/Composite/README.po b/locale/ca/LC_MESSAGES/Structural/Composite/README.po index ce6ce1a..90ddd21 100644 --- a/locale/ca/LC_MESSAGES/Structural/Composite/README.po +++ b/locale/ca/LC_MESSAGES/Structural/Composite/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/Composite/README.rst:2 -msgid "`Composite`_" +msgid "`Composite`__" msgstr "" #: ../../Structural/Composite/README.rst:5 diff --git a/locale/ca/LC_MESSAGES/Structural/DataMapper/README.po b/locale/ca/LC_MESSAGES/Structural/DataMapper/README.po index 28b8d4a..5ccd9a3 100644 --- a/locale/ca/LC_MESSAGES/Structural/DataMapper/README.po +++ b/locale/ca/LC_MESSAGES/Structural/DataMapper/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/DataMapper/README.rst:2 -msgid "`Data Mapper`_" +msgid "`Data Mapper`__" msgstr "" #: ../../Structural/DataMapper/README.rst:5 diff --git a/locale/ca/LC_MESSAGES/Structural/Decorator/README.po b/locale/ca/LC_MESSAGES/Structural/Decorator/README.po index b752b90..0ecf351 100644 --- a/locale/ca/LC_MESSAGES/Structural/Decorator/README.po +++ b/locale/ca/LC_MESSAGES/Structural/Decorator/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/Decorator/README.rst:2 -msgid "`Decorator`_" +msgid "`Decorator`__" msgstr "" #: ../../Structural/Decorator/README.rst:5 diff --git a/locale/ca/LC_MESSAGES/Structural/DependencyInjection/README.po b/locale/ca/LC_MESSAGES/Structural/DependencyInjection/README.po index 9e6e9fa..0834846 100644 --- a/locale/ca/LC_MESSAGES/Structural/DependencyInjection/README.po +++ b/locale/ca/LC_MESSAGES/Structural/DependencyInjection/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/DependencyInjection/README.rst:2 -msgid "`Dependency Injection`_" +msgid "`Dependency Injection`__" msgstr "" #: ../../Structural/DependencyInjection/README.rst:5 diff --git a/locale/ca/LC_MESSAGES/Structural/Facade/README.po b/locale/ca/LC_MESSAGES/Structural/Facade/README.po index 8f8fd9b..1d78bf4 100644 --- a/locale/ca/LC_MESSAGES/Structural/Facade/README.po +++ b/locale/ca/LC_MESSAGES/Structural/Facade/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/Facade/README.rst:2 -msgid "`Facade`_" +msgid "`Facade`__" msgstr "" #: ../../Structural/Facade/README.rst:5 diff --git a/locale/ca/LC_MESSAGES/Structural/FluentInterface/README.po b/locale/ca/LC_MESSAGES/Structural/FluentInterface/README.po index a0d1de7..0e58551 100644 --- a/locale/ca/LC_MESSAGES/Structural/FluentInterface/README.po +++ b/locale/ca/LC_MESSAGES/Structural/FluentInterface/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/FluentInterface/README.rst:2 -msgid "`Fluent Interface`_" +msgid "`Fluent Interface`__" msgstr "" #: ../../Structural/FluentInterface/README.rst:5 diff --git a/locale/ca/LC_MESSAGES/Structural/Proxy/README.po b/locale/ca/LC_MESSAGES/Structural/Proxy/README.po index 3272dfd..290eacc 100644 --- a/locale/ca/LC_MESSAGES/Structural/Proxy/README.po +++ b/locale/ca/LC_MESSAGES/Structural/Proxy/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/Proxy/README.rst:2 -msgid "`Proxy`_" +msgid "`Proxy`__" msgstr "" #: ../../Structural/Proxy/README.rst:5 diff --git a/locale/ca/LC_MESSAGES/Structural/README.po b/locale/ca/LC_MESSAGES/Structural/README.po index 2d2af2d..928301e 100644 --- a/locale/ca/LC_MESSAGES/Structural/README.po +++ b/locale/ca/LC_MESSAGES/Structural/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/ca/LC_MESSAGES/Structural/Registry/README.po b/locale/ca/LC_MESSAGES/Structural/Registry/README.po index 8cff9f1..843138c 100644 --- a/locale/ca/LC_MESSAGES/Structural/Registry/README.po +++ b/locale/ca/LC_MESSAGES/Structural/Registry/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/Registry/README.rst:2 -msgid "`Registry`_" +msgid "`Registry`__" msgstr "" #: ../../Structural/Registry/README.rst:5 diff --git a/locale/es/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po b/locale/es/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po index 5441787..b5277a5 100644 --- a/locale/es/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po +++ b/locale/es/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/ChainOfResponsibilities/README.rst:2 -msgid "`Chain Of Responsibilities`_" +msgid "`Chain Of Responsibilities`__" msgstr "" #: ../../Behavioral/ChainOfResponsibilities/README.rst:5 diff --git a/locale/es/LC_MESSAGES/Behavioral/Command/README.po b/locale/es/LC_MESSAGES/Behavioral/Command/README.po index 34ee70f..29319a3 100644 --- a/locale/es/LC_MESSAGES/Behavioral/Command/README.po +++ b/locale/es/LC_MESSAGES/Behavioral/Command/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Command/README.rst:2 -msgid "`Command`_" +msgid "`Command`__" msgstr "" #: ../../Behavioral/Command/README.rst:5 diff --git a/locale/es/LC_MESSAGES/Behavioral/Iterator/README.po b/locale/es/LC_MESSAGES/Behavioral/Iterator/README.po index 2a298e9..3000658 100644 --- a/locale/es/LC_MESSAGES/Behavioral/Iterator/README.po +++ b/locale/es/LC_MESSAGES/Behavioral/Iterator/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Iterator/README.rst:2 -msgid "`Iterator`_" +msgid "`Iterator`__" msgstr "" #: ../../Behavioral/Iterator/README.rst:5 diff --git a/locale/es/LC_MESSAGES/Behavioral/Mediator/README.po b/locale/es/LC_MESSAGES/Behavioral/Mediator/README.po index f2e9514..9c6694b 100644 --- a/locale/es/LC_MESSAGES/Behavioral/Mediator/README.po +++ b/locale/es/LC_MESSAGES/Behavioral/Mediator/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Mediator/README.rst:2 -msgid "`Mediator`_" +msgid "`Mediator`__" msgstr "" #: ../../Behavioral/Mediator/README.rst:5 diff --git a/locale/es/LC_MESSAGES/Behavioral/Memento/README.po b/locale/es/LC_MESSAGES/Behavioral/Memento/README.po index 9ac83df..913069a 100644 --- a/locale/es/LC_MESSAGES/Behavioral/Memento/README.po +++ b/locale/es/LC_MESSAGES/Behavioral/Memento/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Memento/README.rst:2 -msgid "`Memento`_" +msgid "`Memento`__" msgstr "" #: ../../Behavioral/Memento/README.rst:5 diff --git a/locale/es/LC_MESSAGES/Behavioral/NullObject/README.po b/locale/es/LC_MESSAGES/Behavioral/NullObject/README.po index 28e1eea..35b77f6 100644 --- a/locale/es/LC_MESSAGES/Behavioral/NullObject/README.po +++ b/locale/es/LC_MESSAGES/Behavioral/NullObject/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/NullObject/README.rst:2 -msgid "`Null Object`_" +msgid "`Null Object`__" msgstr "" #: ../../Behavioral/NullObject/README.rst:5 diff --git a/locale/es/LC_MESSAGES/Behavioral/Observer/README.po b/locale/es/LC_MESSAGES/Behavioral/Observer/README.po index 84dd8a9..6aea8e9 100644 --- a/locale/es/LC_MESSAGES/Behavioral/Observer/README.po +++ b/locale/es/LC_MESSAGES/Behavioral/Observer/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Observer/README.rst:2 -msgid "`Observer`_" +msgid "`Observer`__" msgstr "" #: ../../Behavioral/Observer/README.rst:5 diff --git a/locale/es/LC_MESSAGES/Behavioral/README.po b/locale/es/LC_MESSAGES/Behavioral/README.po index d773162..bd66758 100644 --- a/locale/es/LC_MESSAGES/Behavioral/README.po +++ b/locale/es/LC_MESSAGES/Behavioral/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/es/LC_MESSAGES/Behavioral/Specification/README.po b/locale/es/LC_MESSAGES/Behavioral/Specification/README.po index 79bcea6..54e3b64 100644 --- a/locale/es/LC_MESSAGES/Behavioral/Specification/README.po +++ b/locale/es/LC_MESSAGES/Behavioral/Specification/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Specification/README.rst:2 -msgid "`Specification`_" +msgid "`Specification`__" msgstr "" #: ../../Behavioral/Specification/README.rst:5 diff --git a/locale/es/LC_MESSAGES/Behavioral/State/README.po b/locale/es/LC_MESSAGES/Behavioral/State/README.po index a6ed567..f71fbfa 100644 --- a/locale/es/LC_MESSAGES/Behavioral/State/README.po +++ b/locale/es/LC_MESSAGES/Behavioral/State/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/State/README.rst:2 -msgid "`State`_" +msgid "`State`__" msgstr "" #: ../../Behavioral/State/README.rst:5 diff --git a/locale/es/LC_MESSAGES/Behavioral/Strategy/README.po b/locale/es/LC_MESSAGES/Behavioral/Strategy/README.po index 83278ed..dd5797e 100644 --- a/locale/es/LC_MESSAGES/Behavioral/Strategy/README.po +++ b/locale/es/LC_MESSAGES/Behavioral/Strategy/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Strategy/README.rst:2 -msgid "`Strategy`_" +msgid "`Strategy`__" msgstr "" #: ../../Behavioral/Strategy/README.rst:5 diff --git a/locale/es/LC_MESSAGES/Behavioral/TemplateMethod/README.po b/locale/es/LC_MESSAGES/Behavioral/TemplateMethod/README.po index 4fea331..4f6fa81 100644 --- a/locale/es/LC_MESSAGES/Behavioral/TemplateMethod/README.po +++ b/locale/es/LC_MESSAGES/Behavioral/TemplateMethod/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/TemplateMethod/README.rst:2 -msgid "`Template Method`_" +msgid "`Template Method`__" msgstr "" #: ../../Behavioral/TemplateMethod/README.rst:5 diff --git a/locale/es/LC_MESSAGES/Behavioral/Visitor/README.po b/locale/es/LC_MESSAGES/Behavioral/Visitor/README.po index 1664fe3..cab0ea9 100644 --- a/locale/es/LC_MESSAGES/Behavioral/Visitor/README.po +++ b/locale/es/LC_MESSAGES/Behavioral/Visitor/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Visitor/README.rst:2 -msgid "`Visitor`_" +msgid "`Visitor`__" msgstr "" #: ../../Behavioral/Visitor/README.rst:5 diff --git a/locale/es/LC_MESSAGES/Creational/AbstractFactory/README.po b/locale/es/LC_MESSAGES/Creational/AbstractFactory/README.po index 6213f0e..04a383e 100644 --- a/locale/es/LC_MESSAGES/Creational/AbstractFactory/README.po +++ b/locale/es/LC_MESSAGES/Creational/AbstractFactory/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Creational/AbstractFactory/README.rst:2 -msgid "`Abstract Factory`_" +msgid "`Abstract Factory`__" msgstr "" #: ../../Creational/AbstractFactory/README.rst:5 diff --git a/locale/es/LC_MESSAGES/Creational/Builder/README.po b/locale/es/LC_MESSAGES/Creational/Builder/README.po index dfb357a..79d4fe3 100644 --- a/locale/es/LC_MESSAGES/Creational/Builder/README.po +++ b/locale/es/LC_MESSAGES/Creational/Builder/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Creational/Builder/README.rst:2 -msgid "`Builder`_" +msgid "`Builder`__" msgstr "" #: ../../Creational/Builder/README.rst:5 diff --git a/locale/es/LC_MESSAGES/Creational/FactoryMethod/README.po b/locale/es/LC_MESSAGES/Creational/FactoryMethod/README.po index 29fd708..b65c56b 100644 --- a/locale/es/LC_MESSAGES/Creational/FactoryMethod/README.po +++ b/locale/es/LC_MESSAGES/Creational/FactoryMethod/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Creational/FactoryMethod/README.rst:2 -msgid "`Factory Method`_" +msgid "`Factory Method`__" msgstr "" #: ../../Creational/FactoryMethod/README.rst:5 diff --git a/locale/es/LC_MESSAGES/Creational/Multiton/README.po b/locale/es/LC_MESSAGES/Creational/Multiton/README.po index 0990e3c..702271d 100644 --- a/locale/es/LC_MESSAGES/Creational/Multiton/README.po +++ b/locale/es/LC_MESSAGES/Creational/Multiton/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/es/LC_MESSAGES/Creational/Pool/README.po b/locale/es/LC_MESSAGES/Creational/Pool/README.po index 6d829be..8defedd 100644 --- a/locale/es/LC_MESSAGES/Creational/Pool/README.po +++ b/locale/es/LC_MESSAGES/Creational/Pool/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Creational/Pool/README.rst:2 -msgid "`Pool`_" +msgid "`Pool`__" msgstr "" #: ../../Creational/Pool/README.rst:4 diff --git a/locale/es/LC_MESSAGES/Creational/Prototype/README.po b/locale/es/LC_MESSAGES/Creational/Prototype/README.po index 6cdc786..fac09ef 100644 --- a/locale/es/LC_MESSAGES/Creational/Prototype/README.po +++ b/locale/es/LC_MESSAGES/Creational/Prototype/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Creational/Prototype/README.rst:2 -msgid "`Prototype`_" +msgid "`Prototype`__" msgstr "" #: ../../Creational/Prototype/README.rst:5 diff --git a/locale/es/LC_MESSAGES/Creational/README.po b/locale/es/LC_MESSAGES/Creational/README.po index 4d9d72d..d947d57 100644 --- a/locale/es/LC_MESSAGES/Creational/README.po +++ b/locale/es/LC_MESSAGES/Creational/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/es/LC_MESSAGES/Creational/SimpleFactory/README.po b/locale/es/LC_MESSAGES/Creational/SimpleFactory/README.po index a36955e..d011ad6 100644 --- a/locale/es/LC_MESSAGES/Creational/SimpleFactory/README.po +++ b/locale/es/LC_MESSAGES/Creational/SimpleFactory/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/es/LC_MESSAGES/Creational/Singleton/README.po b/locale/es/LC_MESSAGES/Creational/Singleton/README.po index 4911734..5d108ca 100644 --- a/locale/es/LC_MESSAGES/Creational/Singleton/README.po +++ b/locale/es/LC_MESSAGES/Creational/Singleton/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Creational/Singleton/README.rst:2 -msgid "`Singleton`_" +msgid "`Singleton`__" msgstr "" #: ../../Creational/Singleton/README.rst:4 diff --git a/locale/es/LC_MESSAGES/Creational/StaticFactory/README.po b/locale/es/LC_MESSAGES/Creational/StaticFactory/README.po index 3e84e15..4a6f64e 100644 --- a/locale/es/LC_MESSAGES/Creational/StaticFactory/README.po +++ b/locale/es/LC_MESSAGES/Creational/StaticFactory/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/es/LC_MESSAGES/More/Delegation/README.po b/locale/es/LC_MESSAGES/More/Delegation/README.po index ff40269..169e8fd 100644 --- a/locale/es/LC_MESSAGES/More/Delegation/README.po +++ b/locale/es/LC_MESSAGES/More/Delegation/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../More/Delegation/README.rst:2 -msgid "`Delegation`_" +msgid "`Delegation`__" msgstr "" #: ../../More/Delegation/README.rst:5 diff --git a/locale/es/LC_MESSAGES/More/README.po b/locale/es/LC_MESSAGES/More/README.po index c4c30fe..c3585d8 100644 --- a/locale/es/LC_MESSAGES/More/README.po +++ b/locale/es/LC_MESSAGES/More/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/es/LC_MESSAGES/More/Repository/README.po b/locale/es/LC_MESSAGES/More/Repository/README.po index 4849f4f..d9ecc90 100644 --- a/locale/es/LC_MESSAGES/More/Repository/README.po +++ b/locale/es/LC_MESSAGES/More/Repository/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/es/LC_MESSAGES/More/ServiceLocator/README.po b/locale/es/LC_MESSAGES/More/ServiceLocator/README.po index 8f3537e..9808a92 100644 --- a/locale/es/LC_MESSAGES/More/ServiceLocator/README.po +++ b/locale/es/LC_MESSAGES/More/ServiceLocator/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../More/ServiceLocator/README.rst:2 -msgid "`Service Locator`_" +msgid "`Service Locator`__" msgstr "" #: ../../More/ServiceLocator/README.rst:5 diff --git a/locale/es/LC_MESSAGES/README.po b/locale/es/LC_MESSAGES/README.po index 84e21de..3a26db2 100644 --- a/locale/es/LC_MESSAGES/README.po +++ b/locale/es/LC_MESSAGES/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/es/LC_MESSAGES/Structural/Adapter/README.po b/locale/es/LC_MESSAGES/Structural/Adapter/README.po index 420b400..b351fc9 100644 --- a/locale/es/LC_MESSAGES/Structural/Adapter/README.po +++ b/locale/es/LC_MESSAGES/Structural/Adapter/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/Adapter/README.rst:2 -msgid "`Adapter / Wrapper`_" +msgid "`Adapter / Wrapper`__" msgstr "" #: ../../Structural/Adapter/README.rst:5 diff --git a/locale/es/LC_MESSAGES/Structural/Bridge/README.po b/locale/es/LC_MESSAGES/Structural/Bridge/README.po index 6e9ae00..a27619b 100644 --- a/locale/es/LC_MESSAGES/Structural/Bridge/README.po +++ b/locale/es/LC_MESSAGES/Structural/Bridge/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/Bridge/README.rst:2 -msgid "`Bridge`_" +msgid "`Bridge`__" msgstr "" #: ../../Structural/Bridge/README.rst:5 @@ -22,7 +22,7 @@ msgstr "" #: ../../Structural/Bridge/README.rst:7 msgid "" "Decouple an abstraction from its implementation so that the two can vary " -"independently. (http://en.wikipedia.org/wiki/Bridge\\_pattern)" +"independently." msgstr "" #: ../../Structural/Bridge/README.rst:11 diff --git a/locale/es/LC_MESSAGES/Structural/Composite/README.po b/locale/es/LC_MESSAGES/Structural/Composite/README.po index ce6ce1a..90ddd21 100644 --- a/locale/es/LC_MESSAGES/Structural/Composite/README.po +++ b/locale/es/LC_MESSAGES/Structural/Composite/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/Composite/README.rst:2 -msgid "`Composite`_" +msgid "`Composite`__" msgstr "" #: ../../Structural/Composite/README.rst:5 diff --git a/locale/es/LC_MESSAGES/Structural/DataMapper/README.po b/locale/es/LC_MESSAGES/Structural/DataMapper/README.po index 28b8d4a..5ccd9a3 100644 --- a/locale/es/LC_MESSAGES/Structural/DataMapper/README.po +++ b/locale/es/LC_MESSAGES/Structural/DataMapper/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/DataMapper/README.rst:2 -msgid "`Data Mapper`_" +msgid "`Data Mapper`__" msgstr "" #: ../../Structural/DataMapper/README.rst:5 diff --git a/locale/es/LC_MESSAGES/Structural/Decorator/README.po b/locale/es/LC_MESSAGES/Structural/Decorator/README.po index b752b90..0ecf351 100644 --- a/locale/es/LC_MESSAGES/Structural/Decorator/README.po +++ b/locale/es/LC_MESSAGES/Structural/Decorator/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/Decorator/README.rst:2 -msgid "`Decorator`_" +msgid "`Decorator`__" msgstr "" #: ../../Structural/Decorator/README.rst:5 diff --git a/locale/es/LC_MESSAGES/Structural/DependencyInjection/README.po b/locale/es/LC_MESSAGES/Structural/DependencyInjection/README.po index 9e6e9fa..0834846 100644 --- a/locale/es/LC_MESSAGES/Structural/DependencyInjection/README.po +++ b/locale/es/LC_MESSAGES/Structural/DependencyInjection/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/DependencyInjection/README.rst:2 -msgid "`Dependency Injection`_" +msgid "`Dependency Injection`__" msgstr "" #: ../../Structural/DependencyInjection/README.rst:5 diff --git a/locale/es/LC_MESSAGES/Structural/Facade/README.po b/locale/es/LC_MESSAGES/Structural/Facade/README.po index 8f8fd9b..1d78bf4 100644 --- a/locale/es/LC_MESSAGES/Structural/Facade/README.po +++ b/locale/es/LC_MESSAGES/Structural/Facade/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/Facade/README.rst:2 -msgid "`Facade`_" +msgid "`Facade`__" msgstr "" #: ../../Structural/Facade/README.rst:5 diff --git a/locale/es/LC_MESSAGES/Structural/FluentInterface/README.po b/locale/es/LC_MESSAGES/Structural/FluentInterface/README.po index a0d1de7..0e58551 100644 --- a/locale/es/LC_MESSAGES/Structural/FluentInterface/README.po +++ b/locale/es/LC_MESSAGES/Structural/FluentInterface/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/FluentInterface/README.rst:2 -msgid "`Fluent Interface`_" +msgid "`Fluent Interface`__" msgstr "" #: ../../Structural/FluentInterface/README.rst:5 diff --git a/locale/es/LC_MESSAGES/Structural/Proxy/README.po b/locale/es/LC_MESSAGES/Structural/Proxy/README.po index 3272dfd..290eacc 100644 --- a/locale/es/LC_MESSAGES/Structural/Proxy/README.po +++ b/locale/es/LC_MESSAGES/Structural/Proxy/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/Proxy/README.rst:2 -msgid "`Proxy`_" +msgid "`Proxy`__" msgstr "" #: ../../Structural/Proxy/README.rst:5 diff --git a/locale/es/LC_MESSAGES/Structural/README.po b/locale/es/LC_MESSAGES/Structural/README.po index 2d2af2d..928301e 100644 --- a/locale/es/LC_MESSAGES/Structural/README.po +++ b/locale/es/LC_MESSAGES/Structural/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/es/LC_MESSAGES/Structural/Registry/README.po b/locale/es/LC_MESSAGES/Structural/Registry/README.po index 8cff9f1..843138c 100644 --- a/locale/es/LC_MESSAGES/Structural/Registry/README.po +++ b/locale/es/LC_MESSAGES/Structural/Registry/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/Registry/README.rst:2 -msgid "`Registry`_" +msgid "`Registry`__" msgstr "" #: ../../Structural/Registry/README.rst:5 diff --git a/locale/pt_BR/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po b/locale/pt_BR/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po index 5441787..b5277a5 100644 --- a/locale/pt_BR/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po +++ b/locale/pt_BR/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/ChainOfResponsibilities/README.rst:2 -msgid "`Chain Of Responsibilities`_" +msgid "`Chain Of Responsibilities`__" msgstr "" #: ../../Behavioral/ChainOfResponsibilities/README.rst:5 diff --git a/locale/pt_BR/LC_MESSAGES/Behavioral/Command/README.po b/locale/pt_BR/LC_MESSAGES/Behavioral/Command/README.po index 34ee70f..29319a3 100644 --- a/locale/pt_BR/LC_MESSAGES/Behavioral/Command/README.po +++ b/locale/pt_BR/LC_MESSAGES/Behavioral/Command/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Command/README.rst:2 -msgid "`Command`_" +msgid "`Command`__" msgstr "" #: ../../Behavioral/Command/README.rst:5 diff --git a/locale/pt_BR/LC_MESSAGES/Behavioral/Iterator/README.po b/locale/pt_BR/LC_MESSAGES/Behavioral/Iterator/README.po index 2a298e9..3000658 100644 --- a/locale/pt_BR/LC_MESSAGES/Behavioral/Iterator/README.po +++ b/locale/pt_BR/LC_MESSAGES/Behavioral/Iterator/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Iterator/README.rst:2 -msgid "`Iterator`_" +msgid "`Iterator`__" msgstr "" #: ../../Behavioral/Iterator/README.rst:5 diff --git a/locale/pt_BR/LC_MESSAGES/Behavioral/Mediator/README.po b/locale/pt_BR/LC_MESSAGES/Behavioral/Mediator/README.po index f2e9514..9c6694b 100644 --- a/locale/pt_BR/LC_MESSAGES/Behavioral/Mediator/README.po +++ b/locale/pt_BR/LC_MESSAGES/Behavioral/Mediator/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Mediator/README.rst:2 -msgid "`Mediator`_" +msgid "`Mediator`__" msgstr "" #: ../../Behavioral/Mediator/README.rst:5 diff --git a/locale/pt_BR/LC_MESSAGES/Behavioral/Memento/README.po b/locale/pt_BR/LC_MESSAGES/Behavioral/Memento/README.po index 9ac83df..913069a 100644 --- a/locale/pt_BR/LC_MESSAGES/Behavioral/Memento/README.po +++ b/locale/pt_BR/LC_MESSAGES/Behavioral/Memento/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Memento/README.rst:2 -msgid "`Memento`_" +msgid "`Memento`__" msgstr "" #: ../../Behavioral/Memento/README.rst:5 diff --git a/locale/pt_BR/LC_MESSAGES/Behavioral/NullObject/README.po b/locale/pt_BR/LC_MESSAGES/Behavioral/NullObject/README.po index 28e1eea..35b77f6 100644 --- a/locale/pt_BR/LC_MESSAGES/Behavioral/NullObject/README.po +++ b/locale/pt_BR/LC_MESSAGES/Behavioral/NullObject/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/NullObject/README.rst:2 -msgid "`Null Object`_" +msgid "`Null Object`__" msgstr "" #: ../../Behavioral/NullObject/README.rst:5 diff --git a/locale/pt_BR/LC_MESSAGES/Behavioral/Observer/README.po b/locale/pt_BR/LC_MESSAGES/Behavioral/Observer/README.po index 84dd8a9..6aea8e9 100644 --- a/locale/pt_BR/LC_MESSAGES/Behavioral/Observer/README.po +++ b/locale/pt_BR/LC_MESSAGES/Behavioral/Observer/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Observer/README.rst:2 -msgid "`Observer`_" +msgid "`Observer`__" msgstr "" #: ../../Behavioral/Observer/README.rst:5 diff --git a/locale/pt_BR/LC_MESSAGES/Behavioral/README.po b/locale/pt_BR/LC_MESSAGES/Behavioral/README.po index d773162..bd66758 100644 --- a/locale/pt_BR/LC_MESSAGES/Behavioral/README.po +++ b/locale/pt_BR/LC_MESSAGES/Behavioral/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/pt_BR/LC_MESSAGES/Behavioral/Specification/README.po b/locale/pt_BR/LC_MESSAGES/Behavioral/Specification/README.po index 79bcea6..54e3b64 100644 --- a/locale/pt_BR/LC_MESSAGES/Behavioral/Specification/README.po +++ b/locale/pt_BR/LC_MESSAGES/Behavioral/Specification/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Specification/README.rst:2 -msgid "`Specification`_" +msgid "`Specification`__" msgstr "" #: ../../Behavioral/Specification/README.rst:5 diff --git a/locale/pt_BR/LC_MESSAGES/Behavioral/State/README.po b/locale/pt_BR/LC_MESSAGES/Behavioral/State/README.po index a6ed567..f71fbfa 100644 --- a/locale/pt_BR/LC_MESSAGES/Behavioral/State/README.po +++ b/locale/pt_BR/LC_MESSAGES/Behavioral/State/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/State/README.rst:2 -msgid "`State`_" +msgid "`State`__" msgstr "" #: ../../Behavioral/State/README.rst:5 diff --git a/locale/pt_BR/LC_MESSAGES/Behavioral/Strategy/README.po b/locale/pt_BR/LC_MESSAGES/Behavioral/Strategy/README.po index 83278ed..dd5797e 100644 --- a/locale/pt_BR/LC_MESSAGES/Behavioral/Strategy/README.po +++ b/locale/pt_BR/LC_MESSAGES/Behavioral/Strategy/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Strategy/README.rst:2 -msgid "`Strategy`_" +msgid "`Strategy`__" msgstr "" #: ../../Behavioral/Strategy/README.rst:5 diff --git a/locale/pt_BR/LC_MESSAGES/Behavioral/TemplateMethod/README.po b/locale/pt_BR/LC_MESSAGES/Behavioral/TemplateMethod/README.po index 4fea331..4f6fa81 100644 --- a/locale/pt_BR/LC_MESSAGES/Behavioral/TemplateMethod/README.po +++ b/locale/pt_BR/LC_MESSAGES/Behavioral/TemplateMethod/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/TemplateMethod/README.rst:2 -msgid "`Template Method`_" +msgid "`Template Method`__" msgstr "" #: ../../Behavioral/TemplateMethod/README.rst:5 diff --git a/locale/pt_BR/LC_MESSAGES/Behavioral/Visitor/README.po b/locale/pt_BR/LC_MESSAGES/Behavioral/Visitor/README.po index 1664fe3..cab0ea9 100644 --- a/locale/pt_BR/LC_MESSAGES/Behavioral/Visitor/README.po +++ b/locale/pt_BR/LC_MESSAGES/Behavioral/Visitor/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Visitor/README.rst:2 -msgid "`Visitor`_" +msgid "`Visitor`__" msgstr "" #: ../../Behavioral/Visitor/README.rst:5 diff --git a/locale/pt_BR/LC_MESSAGES/Creational/AbstractFactory/README.po b/locale/pt_BR/LC_MESSAGES/Creational/AbstractFactory/README.po index 6213f0e..04a383e 100644 --- a/locale/pt_BR/LC_MESSAGES/Creational/AbstractFactory/README.po +++ b/locale/pt_BR/LC_MESSAGES/Creational/AbstractFactory/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Creational/AbstractFactory/README.rst:2 -msgid "`Abstract Factory`_" +msgid "`Abstract Factory`__" msgstr "" #: ../../Creational/AbstractFactory/README.rst:5 diff --git a/locale/pt_BR/LC_MESSAGES/Creational/Builder/README.po b/locale/pt_BR/LC_MESSAGES/Creational/Builder/README.po index dfb357a..79d4fe3 100644 --- a/locale/pt_BR/LC_MESSAGES/Creational/Builder/README.po +++ b/locale/pt_BR/LC_MESSAGES/Creational/Builder/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Creational/Builder/README.rst:2 -msgid "`Builder`_" +msgid "`Builder`__" msgstr "" #: ../../Creational/Builder/README.rst:5 diff --git a/locale/pt_BR/LC_MESSAGES/Creational/FactoryMethod/README.po b/locale/pt_BR/LC_MESSAGES/Creational/FactoryMethod/README.po index 29fd708..b65c56b 100644 --- a/locale/pt_BR/LC_MESSAGES/Creational/FactoryMethod/README.po +++ b/locale/pt_BR/LC_MESSAGES/Creational/FactoryMethod/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Creational/FactoryMethod/README.rst:2 -msgid "`Factory Method`_" +msgid "`Factory Method`__" msgstr "" #: ../../Creational/FactoryMethod/README.rst:5 diff --git a/locale/pt_BR/LC_MESSAGES/Creational/Multiton/README.po b/locale/pt_BR/LC_MESSAGES/Creational/Multiton/README.po index 0990e3c..702271d 100644 --- a/locale/pt_BR/LC_MESSAGES/Creational/Multiton/README.po +++ b/locale/pt_BR/LC_MESSAGES/Creational/Multiton/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/pt_BR/LC_MESSAGES/Creational/Pool/README.po b/locale/pt_BR/LC_MESSAGES/Creational/Pool/README.po index 6d829be..8defedd 100644 --- a/locale/pt_BR/LC_MESSAGES/Creational/Pool/README.po +++ b/locale/pt_BR/LC_MESSAGES/Creational/Pool/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Creational/Pool/README.rst:2 -msgid "`Pool`_" +msgid "`Pool`__" msgstr "" #: ../../Creational/Pool/README.rst:4 diff --git a/locale/pt_BR/LC_MESSAGES/Creational/Prototype/README.po b/locale/pt_BR/LC_MESSAGES/Creational/Prototype/README.po index 6cdc786..fac09ef 100644 --- a/locale/pt_BR/LC_MESSAGES/Creational/Prototype/README.po +++ b/locale/pt_BR/LC_MESSAGES/Creational/Prototype/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Creational/Prototype/README.rst:2 -msgid "`Prototype`_" +msgid "`Prototype`__" msgstr "" #: ../../Creational/Prototype/README.rst:5 diff --git a/locale/pt_BR/LC_MESSAGES/Creational/README.po b/locale/pt_BR/LC_MESSAGES/Creational/README.po index 4d9d72d..d947d57 100644 --- a/locale/pt_BR/LC_MESSAGES/Creational/README.po +++ b/locale/pt_BR/LC_MESSAGES/Creational/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/pt_BR/LC_MESSAGES/Creational/SimpleFactory/README.po b/locale/pt_BR/LC_MESSAGES/Creational/SimpleFactory/README.po index a36955e..d011ad6 100644 --- a/locale/pt_BR/LC_MESSAGES/Creational/SimpleFactory/README.po +++ b/locale/pt_BR/LC_MESSAGES/Creational/SimpleFactory/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/pt_BR/LC_MESSAGES/Creational/Singleton/README.po b/locale/pt_BR/LC_MESSAGES/Creational/Singleton/README.po index 4911734..5d108ca 100644 --- a/locale/pt_BR/LC_MESSAGES/Creational/Singleton/README.po +++ b/locale/pt_BR/LC_MESSAGES/Creational/Singleton/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Creational/Singleton/README.rst:2 -msgid "`Singleton`_" +msgid "`Singleton`__" msgstr "" #: ../../Creational/Singleton/README.rst:4 diff --git a/locale/pt_BR/LC_MESSAGES/Creational/StaticFactory/README.po b/locale/pt_BR/LC_MESSAGES/Creational/StaticFactory/README.po index 3e84e15..4a6f64e 100644 --- a/locale/pt_BR/LC_MESSAGES/Creational/StaticFactory/README.po +++ b/locale/pt_BR/LC_MESSAGES/Creational/StaticFactory/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/pt_BR/LC_MESSAGES/More/Delegation/README.po b/locale/pt_BR/LC_MESSAGES/More/Delegation/README.po index ff40269..169e8fd 100644 --- a/locale/pt_BR/LC_MESSAGES/More/Delegation/README.po +++ b/locale/pt_BR/LC_MESSAGES/More/Delegation/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../More/Delegation/README.rst:2 -msgid "`Delegation`_" +msgid "`Delegation`__" msgstr "" #: ../../More/Delegation/README.rst:5 diff --git a/locale/pt_BR/LC_MESSAGES/More/README.po b/locale/pt_BR/LC_MESSAGES/More/README.po index c4c30fe..c3585d8 100644 --- a/locale/pt_BR/LC_MESSAGES/More/README.po +++ b/locale/pt_BR/LC_MESSAGES/More/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/pt_BR/LC_MESSAGES/More/Repository/README.po b/locale/pt_BR/LC_MESSAGES/More/Repository/README.po index 4849f4f..d9ecc90 100644 --- a/locale/pt_BR/LC_MESSAGES/More/Repository/README.po +++ b/locale/pt_BR/LC_MESSAGES/More/Repository/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/pt_BR/LC_MESSAGES/More/ServiceLocator/README.po b/locale/pt_BR/LC_MESSAGES/More/ServiceLocator/README.po index 8f3537e..9808a92 100644 --- a/locale/pt_BR/LC_MESSAGES/More/ServiceLocator/README.po +++ b/locale/pt_BR/LC_MESSAGES/More/ServiceLocator/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../More/ServiceLocator/README.rst:2 -msgid "`Service Locator`_" +msgid "`Service Locator`__" msgstr "" #: ../../More/ServiceLocator/README.rst:5 diff --git a/locale/pt_BR/LC_MESSAGES/README.po b/locale/pt_BR/LC_MESSAGES/README.po index 84e21de..3a26db2 100644 --- a/locale/pt_BR/LC_MESSAGES/README.po +++ b/locale/pt_BR/LC_MESSAGES/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/pt_BR/LC_MESSAGES/Structural/Adapter/README.po b/locale/pt_BR/LC_MESSAGES/Structural/Adapter/README.po index 420b400..b351fc9 100644 --- a/locale/pt_BR/LC_MESSAGES/Structural/Adapter/README.po +++ b/locale/pt_BR/LC_MESSAGES/Structural/Adapter/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/Adapter/README.rst:2 -msgid "`Adapter / Wrapper`_" +msgid "`Adapter / Wrapper`__" msgstr "" #: ../../Structural/Adapter/README.rst:5 diff --git a/locale/pt_BR/LC_MESSAGES/Structural/Bridge/README.po b/locale/pt_BR/LC_MESSAGES/Structural/Bridge/README.po index 6e9ae00..a27619b 100644 --- a/locale/pt_BR/LC_MESSAGES/Structural/Bridge/README.po +++ b/locale/pt_BR/LC_MESSAGES/Structural/Bridge/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/Bridge/README.rst:2 -msgid "`Bridge`_" +msgid "`Bridge`__" msgstr "" #: ../../Structural/Bridge/README.rst:5 @@ -22,7 +22,7 @@ msgstr "" #: ../../Structural/Bridge/README.rst:7 msgid "" "Decouple an abstraction from its implementation so that the two can vary " -"independently. (http://en.wikipedia.org/wiki/Bridge\\_pattern)" +"independently." msgstr "" #: ../../Structural/Bridge/README.rst:11 diff --git a/locale/pt_BR/LC_MESSAGES/Structural/Composite/README.po b/locale/pt_BR/LC_MESSAGES/Structural/Composite/README.po index ce6ce1a..90ddd21 100644 --- a/locale/pt_BR/LC_MESSAGES/Structural/Composite/README.po +++ b/locale/pt_BR/LC_MESSAGES/Structural/Composite/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/Composite/README.rst:2 -msgid "`Composite`_" +msgid "`Composite`__" msgstr "" #: ../../Structural/Composite/README.rst:5 diff --git a/locale/pt_BR/LC_MESSAGES/Structural/DataMapper/README.po b/locale/pt_BR/LC_MESSAGES/Structural/DataMapper/README.po index 28b8d4a..5ccd9a3 100644 --- a/locale/pt_BR/LC_MESSAGES/Structural/DataMapper/README.po +++ b/locale/pt_BR/LC_MESSAGES/Structural/DataMapper/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/DataMapper/README.rst:2 -msgid "`Data Mapper`_" +msgid "`Data Mapper`__" msgstr "" #: ../../Structural/DataMapper/README.rst:5 diff --git a/locale/pt_BR/LC_MESSAGES/Structural/Decorator/README.po b/locale/pt_BR/LC_MESSAGES/Structural/Decorator/README.po index b752b90..0ecf351 100644 --- a/locale/pt_BR/LC_MESSAGES/Structural/Decorator/README.po +++ b/locale/pt_BR/LC_MESSAGES/Structural/Decorator/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/Decorator/README.rst:2 -msgid "`Decorator`_" +msgid "`Decorator`__" msgstr "" #: ../../Structural/Decorator/README.rst:5 diff --git a/locale/pt_BR/LC_MESSAGES/Structural/DependencyInjection/README.po b/locale/pt_BR/LC_MESSAGES/Structural/DependencyInjection/README.po index 9e6e9fa..0834846 100644 --- a/locale/pt_BR/LC_MESSAGES/Structural/DependencyInjection/README.po +++ b/locale/pt_BR/LC_MESSAGES/Structural/DependencyInjection/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/DependencyInjection/README.rst:2 -msgid "`Dependency Injection`_" +msgid "`Dependency Injection`__" msgstr "" #: ../../Structural/DependencyInjection/README.rst:5 diff --git a/locale/pt_BR/LC_MESSAGES/Structural/Facade/README.po b/locale/pt_BR/LC_MESSAGES/Structural/Facade/README.po index 8f8fd9b..1d78bf4 100644 --- a/locale/pt_BR/LC_MESSAGES/Structural/Facade/README.po +++ b/locale/pt_BR/LC_MESSAGES/Structural/Facade/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/Facade/README.rst:2 -msgid "`Facade`_" +msgid "`Facade`__" msgstr "" #: ../../Structural/Facade/README.rst:5 diff --git a/locale/pt_BR/LC_MESSAGES/Structural/FluentInterface/README.po b/locale/pt_BR/LC_MESSAGES/Structural/FluentInterface/README.po index a0d1de7..0e58551 100644 --- a/locale/pt_BR/LC_MESSAGES/Structural/FluentInterface/README.po +++ b/locale/pt_BR/LC_MESSAGES/Structural/FluentInterface/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/FluentInterface/README.rst:2 -msgid "`Fluent Interface`_" +msgid "`Fluent Interface`__" msgstr "" #: ../../Structural/FluentInterface/README.rst:5 diff --git a/locale/pt_BR/LC_MESSAGES/Structural/Proxy/README.po b/locale/pt_BR/LC_MESSAGES/Structural/Proxy/README.po index 3272dfd..290eacc 100644 --- a/locale/pt_BR/LC_MESSAGES/Structural/Proxy/README.po +++ b/locale/pt_BR/LC_MESSAGES/Structural/Proxy/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/Proxy/README.rst:2 -msgid "`Proxy`_" +msgid "`Proxy`__" msgstr "" #: ../../Structural/Proxy/README.rst:5 diff --git a/locale/pt_BR/LC_MESSAGES/Structural/README.po b/locale/pt_BR/LC_MESSAGES/Structural/README.po index 2d2af2d..928301e 100644 --- a/locale/pt_BR/LC_MESSAGES/Structural/README.po +++ b/locale/pt_BR/LC_MESSAGES/Structural/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/pt_BR/LC_MESSAGES/Structural/Registry/README.po b/locale/pt_BR/LC_MESSAGES/Structural/Registry/README.po index 8cff9f1..843138c 100644 --- a/locale/pt_BR/LC_MESSAGES/Structural/Registry/README.po +++ b/locale/pt_BR/LC_MESSAGES/Structural/Registry/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/Registry/README.rst:2 -msgid "`Registry`_" +msgid "`Registry`__" msgstr "" #: ../../Structural/Registry/README.rst:5 diff --git a/locale/ru/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po b/locale/ru/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po index 5441787..b5277a5 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/ChainOfResponsibilities/README.rst:2 -msgid "`Chain Of Responsibilities`_" +msgid "`Chain Of Responsibilities`__" msgstr "" #: ../../Behavioral/ChainOfResponsibilities/README.rst:5 diff --git a/locale/ru/LC_MESSAGES/Behavioral/Command/README.po b/locale/ru/LC_MESSAGES/Behavioral/Command/README.po index 34ee70f..29319a3 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/Command/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/Command/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Command/README.rst:2 -msgid "`Command`_" +msgid "`Command`__" msgstr "" #: ../../Behavioral/Command/README.rst:5 diff --git a/locale/ru/LC_MESSAGES/Behavioral/Iterator/README.po b/locale/ru/LC_MESSAGES/Behavioral/Iterator/README.po index 2a298e9..3000658 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/Iterator/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/Iterator/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Iterator/README.rst:2 -msgid "`Iterator`_" +msgid "`Iterator`__" msgstr "" #: ../../Behavioral/Iterator/README.rst:5 diff --git a/locale/ru/LC_MESSAGES/Behavioral/Mediator/README.po b/locale/ru/LC_MESSAGES/Behavioral/Mediator/README.po index f2e9514..9c6694b 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/Mediator/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/Mediator/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Mediator/README.rst:2 -msgid "`Mediator`_" +msgid "`Mediator`__" msgstr "" #: ../../Behavioral/Mediator/README.rst:5 diff --git a/locale/ru/LC_MESSAGES/Behavioral/Memento/README.po b/locale/ru/LC_MESSAGES/Behavioral/Memento/README.po index 9ac83df..913069a 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/Memento/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/Memento/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Memento/README.rst:2 -msgid "`Memento`_" +msgid "`Memento`__" msgstr "" #: ../../Behavioral/Memento/README.rst:5 diff --git a/locale/ru/LC_MESSAGES/Behavioral/NullObject/README.po b/locale/ru/LC_MESSAGES/Behavioral/NullObject/README.po index 28e1eea..35b77f6 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/NullObject/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/NullObject/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/NullObject/README.rst:2 -msgid "`Null Object`_" +msgid "`Null Object`__" msgstr "" #: ../../Behavioral/NullObject/README.rst:5 diff --git a/locale/ru/LC_MESSAGES/Behavioral/Observer/README.po b/locale/ru/LC_MESSAGES/Behavioral/Observer/README.po index 84dd8a9..6aea8e9 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/Observer/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/Observer/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Observer/README.rst:2 -msgid "`Observer`_" +msgid "`Observer`__" msgstr "" #: ../../Behavioral/Observer/README.rst:5 diff --git a/locale/ru/LC_MESSAGES/Behavioral/README.po b/locale/ru/LC_MESSAGES/Behavioral/README.po index d773162..bd66758 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/ru/LC_MESSAGES/Behavioral/Specification/README.po b/locale/ru/LC_MESSAGES/Behavioral/Specification/README.po index 79bcea6..54e3b64 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/Specification/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/Specification/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Specification/README.rst:2 -msgid "`Specification`_" +msgid "`Specification`__" msgstr "" #: ../../Behavioral/Specification/README.rst:5 diff --git a/locale/ru/LC_MESSAGES/Behavioral/State/README.po b/locale/ru/LC_MESSAGES/Behavioral/State/README.po index a6ed567..f71fbfa 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/State/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/State/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/State/README.rst:2 -msgid "`State`_" +msgid "`State`__" msgstr "" #: ../../Behavioral/State/README.rst:5 diff --git a/locale/ru/LC_MESSAGES/Behavioral/Strategy/README.po b/locale/ru/LC_MESSAGES/Behavioral/Strategy/README.po index 83278ed..dd5797e 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/Strategy/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/Strategy/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Strategy/README.rst:2 -msgid "`Strategy`_" +msgid "`Strategy`__" msgstr "" #: ../../Behavioral/Strategy/README.rst:5 diff --git a/locale/ru/LC_MESSAGES/Behavioral/TemplateMethod/README.po b/locale/ru/LC_MESSAGES/Behavioral/TemplateMethod/README.po index 4fea331..4f6fa81 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/TemplateMethod/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/TemplateMethod/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/TemplateMethod/README.rst:2 -msgid "`Template Method`_" +msgid "`Template Method`__" msgstr "" #: ../../Behavioral/TemplateMethod/README.rst:5 diff --git a/locale/ru/LC_MESSAGES/Behavioral/Visitor/README.po b/locale/ru/LC_MESSAGES/Behavioral/Visitor/README.po index 1664fe3..cab0ea9 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/Visitor/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/Visitor/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/Visitor/README.rst:2 -msgid "`Visitor`_" +msgid "`Visitor`__" msgstr "" #: ../../Behavioral/Visitor/README.rst:5 diff --git a/locale/ru/LC_MESSAGES/Creational/AbstractFactory/README.po b/locale/ru/LC_MESSAGES/Creational/AbstractFactory/README.po index 6213f0e..04a383e 100644 --- a/locale/ru/LC_MESSAGES/Creational/AbstractFactory/README.po +++ b/locale/ru/LC_MESSAGES/Creational/AbstractFactory/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Creational/AbstractFactory/README.rst:2 -msgid "`Abstract Factory`_" +msgid "`Abstract Factory`__" msgstr "" #: ../../Creational/AbstractFactory/README.rst:5 diff --git a/locale/ru/LC_MESSAGES/Creational/Builder/README.po b/locale/ru/LC_MESSAGES/Creational/Builder/README.po index dfb357a..79d4fe3 100644 --- a/locale/ru/LC_MESSAGES/Creational/Builder/README.po +++ b/locale/ru/LC_MESSAGES/Creational/Builder/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Creational/Builder/README.rst:2 -msgid "`Builder`_" +msgid "`Builder`__" msgstr "" #: ../../Creational/Builder/README.rst:5 diff --git a/locale/ru/LC_MESSAGES/Creational/FactoryMethod/README.po b/locale/ru/LC_MESSAGES/Creational/FactoryMethod/README.po index 29fd708..b65c56b 100644 --- a/locale/ru/LC_MESSAGES/Creational/FactoryMethod/README.po +++ b/locale/ru/LC_MESSAGES/Creational/FactoryMethod/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Creational/FactoryMethod/README.rst:2 -msgid "`Factory Method`_" +msgid "`Factory Method`__" msgstr "" #: ../../Creational/FactoryMethod/README.rst:5 diff --git a/locale/ru/LC_MESSAGES/Creational/Multiton/README.po b/locale/ru/LC_MESSAGES/Creational/Multiton/README.po index 0990e3c..702271d 100644 --- a/locale/ru/LC_MESSAGES/Creational/Multiton/README.po +++ b/locale/ru/LC_MESSAGES/Creational/Multiton/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/ru/LC_MESSAGES/Creational/Pool/README.po b/locale/ru/LC_MESSAGES/Creational/Pool/README.po index 6d829be..8defedd 100644 --- a/locale/ru/LC_MESSAGES/Creational/Pool/README.po +++ b/locale/ru/LC_MESSAGES/Creational/Pool/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Creational/Pool/README.rst:2 -msgid "`Pool`_" +msgid "`Pool`__" msgstr "" #: ../../Creational/Pool/README.rst:4 diff --git a/locale/ru/LC_MESSAGES/Creational/Prototype/README.po b/locale/ru/LC_MESSAGES/Creational/Prototype/README.po index 6cdc786..fac09ef 100644 --- a/locale/ru/LC_MESSAGES/Creational/Prototype/README.po +++ b/locale/ru/LC_MESSAGES/Creational/Prototype/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Creational/Prototype/README.rst:2 -msgid "`Prototype`_" +msgid "`Prototype`__" msgstr "" #: ../../Creational/Prototype/README.rst:5 diff --git a/locale/ru/LC_MESSAGES/Creational/README.po b/locale/ru/LC_MESSAGES/Creational/README.po index 4d9d72d..d947d57 100644 --- a/locale/ru/LC_MESSAGES/Creational/README.po +++ b/locale/ru/LC_MESSAGES/Creational/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/ru/LC_MESSAGES/Creational/SimpleFactory/README.po b/locale/ru/LC_MESSAGES/Creational/SimpleFactory/README.po index a36955e..d011ad6 100644 --- a/locale/ru/LC_MESSAGES/Creational/SimpleFactory/README.po +++ b/locale/ru/LC_MESSAGES/Creational/SimpleFactory/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/ru/LC_MESSAGES/Creational/Singleton/README.po b/locale/ru/LC_MESSAGES/Creational/Singleton/README.po index 4911734..5d108ca 100644 --- a/locale/ru/LC_MESSAGES/Creational/Singleton/README.po +++ b/locale/ru/LC_MESSAGES/Creational/Singleton/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Creational/Singleton/README.rst:2 -msgid "`Singleton`_" +msgid "`Singleton`__" msgstr "" #: ../../Creational/Singleton/README.rst:4 diff --git a/locale/ru/LC_MESSAGES/Creational/StaticFactory/README.po b/locale/ru/LC_MESSAGES/Creational/StaticFactory/README.po index 3e84e15..4a6f64e 100644 --- a/locale/ru/LC_MESSAGES/Creational/StaticFactory/README.po +++ b/locale/ru/LC_MESSAGES/Creational/StaticFactory/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/ru/LC_MESSAGES/More/Delegation/README.po b/locale/ru/LC_MESSAGES/More/Delegation/README.po index ff40269..169e8fd 100644 --- a/locale/ru/LC_MESSAGES/More/Delegation/README.po +++ b/locale/ru/LC_MESSAGES/More/Delegation/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../More/Delegation/README.rst:2 -msgid "`Delegation`_" +msgid "`Delegation`__" msgstr "" #: ../../More/Delegation/README.rst:5 diff --git a/locale/ru/LC_MESSAGES/More/README.po b/locale/ru/LC_MESSAGES/More/README.po index c4c30fe..c3585d8 100644 --- a/locale/ru/LC_MESSAGES/More/README.po +++ b/locale/ru/LC_MESSAGES/More/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/ru/LC_MESSAGES/More/Repository/README.po b/locale/ru/LC_MESSAGES/More/Repository/README.po index 4849f4f..d9ecc90 100644 --- a/locale/ru/LC_MESSAGES/More/Repository/README.po +++ b/locale/ru/LC_MESSAGES/More/Repository/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/ru/LC_MESSAGES/More/ServiceLocator/README.po b/locale/ru/LC_MESSAGES/More/ServiceLocator/README.po index 8f3537e..9808a92 100644 --- a/locale/ru/LC_MESSAGES/More/ServiceLocator/README.po +++ b/locale/ru/LC_MESSAGES/More/ServiceLocator/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../More/ServiceLocator/README.rst:2 -msgid "`Service Locator`_" +msgid "`Service Locator`__" msgstr "" #: ../../More/ServiceLocator/README.rst:5 diff --git a/locale/ru/LC_MESSAGES/README.po b/locale/ru/LC_MESSAGES/README.po index 84e21de..3a26db2 100644 --- a/locale/ru/LC_MESSAGES/README.po +++ b/locale/ru/LC_MESSAGES/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/ru/LC_MESSAGES/Structural/Adapter/README.po b/locale/ru/LC_MESSAGES/Structural/Adapter/README.po index 420b400..b351fc9 100644 --- a/locale/ru/LC_MESSAGES/Structural/Adapter/README.po +++ b/locale/ru/LC_MESSAGES/Structural/Adapter/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/Adapter/README.rst:2 -msgid "`Adapter / Wrapper`_" +msgid "`Adapter / Wrapper`__" msgstr "" #: ../../Structural/Adapter/README.rst:5 diff --git a/locale/ru/LC_MESSAGES/Structural/Bridge/README.po b/locale/ru/LC_MESSAGES/Structural/Bridge/README.po index 6e9ae00..a27619b 100644 --- a/locale/ru/LC_MESSAGES/Structural/Bridge/README.po +++ b/locale/ru/LC_MESSAGES/Structural/Bridge/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/Bridge/README.rst:2 -msgid "`Bridge`_" +msgid "`Bridge`__" msgstr "" #: ../../Structural/Bridge/README.rst:5 @@ -22,7 +22,7 @@ msgstr "" #: ../../Structural/Bridge/README.rst:7 msgid "" "Decouple an abstraction from its implementation so that the two can vary " -"independently. (http://en.wikipedia.org/wiki/Bridge\\_pattern)" +"independently." msgstr "" #: ../../Structural/Bridge/README.rst:11 diff --git a/locale/ru/LC_MESSAGES/Structural/Composite/README.po b/locale/ru/LC_MESSAGES/Structural/Composite/README.po index ce6ce1a..90ddd21 100644 --- a/locale/ru/LC_MESSAGES/Structural/Composite/README.po +++ b/locale/ru/LC_MESSAGES/Structural/Composite/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/Composite/README.rst:2 -msgid "`Composite`_" +msgid "`Composite`__" msgstr "" #: ../../Structural/Composite/README.rst:5 diff --git a/locale/ru/LC_MESSAGES/Structural/DataMapper/README.po b/locale/ru/LC_MESSAGES/Structural/DataMapper/README.po index 28b8d4a..5ccd9a3 100644 --- a/locale/ru/LC_MESSAGES/Structural/DataMapper/README.po +++ b/locale/ru/LC_MESSAGES/Structural/DataMapper/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/DataMapper/README.rst:2 -msgid "`Data Mapper`_" +msgid "`Data Mapper`__" msgstr "" #: ../../Structural/DataMapper/README.rst:5 diff --git a/locale/ru/LC_MESSAGES/Structural/Decorator/README.po b/locale/ru/LC_MESSAGES/Structural/Decorator/README.po index b752b90..0ecf351 100644 --- a/locale/ru/LC_MESSAGES/Structural/Decorator/README.po +++ b/locale/ru/LC_MESSAGES/Structural/Decorator/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/Decorator/README.rst:2 -msgid "`Decorator`_" +msgid "`Decorator`__" msgstr "" #: ../../Structural/Decorator/README.rst:5 diff --git a/locale/ru/LC_MESSAGES/Structural/DependencyInjection/README.po b/locale/ru/LC_MESSAGES/Structural/DependencyInjection/README.po index 9e6e9fa..0834846 100644 --- a/locale/ru/LC_MESSAGES/Structural/DependencyInjection/README.po +++ b/locale/ru/LC_MESSAGES/Structural/DependencyInjection/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/DependencyInjection/README.rst:2 -msgid "`Dependency Injection`_" +msgid "`Dependency Injection`__" msgstr "" #: ../../Structural/DependencyInjection/README.rst:5 diff --git a/locale/ru/LC_MESSAGES/Structural/Facade/README.po b/locale/ru/LC_MESSAGES/Structural/Facade/README.po index 8f8fd9b..1d78bf4 100644 --- a/locale/ru/LC_MESSAGES/Structural/Facade/README.po +++ b/locale/ru/LC_MESSAGES/Structural/Facade/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/Facade/README.rst:2 -msgid "`Facade`_" +msgid "`Facade`__" msgstr "" #: ../../Structural/Facade/README.rst:5 diff --git a/locale/ru/LC_MESSAGES/Structural/FluentInterface/README.po b/locale/ru/LC_MESSAGES/Structural/FluentInterface/README.po index a0d1de7..0e58551 100644 --- a/locale/ru/LC_MESSAGES/Structural/FluentInterface/README.po +++ b/locale/ru/LC_MESSAGES/Structural/FluentInterface/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/FluentInterface/README.rst:2 -msgid "`Fluent Interface`_" +msgid "`Fluent Interface`__" msgstr "" #: ../../Structural/FluentInterface/README.rst:5 diff --git a/locale/ru/LC_MESSAGES/Structural/Proxy/README.po b/locale/ru/LC_MESSAGES/Structural/Proxy/README.po index 3272dfd..290eacc 100644 --- a/locale/ru/LC_MESSAGES/Structural/Proxy/README.po +++ b/locale/ru/LC_MESSAGES/Structural/Proxy/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/Proxy/README.rst:2 -msgid "`Proxy`_" +msgid "`Proxy`__" msgstr "" #: ../../Structural/Proxy/README.rst:5 diff --git a/locale/ru/LC_MESSAGES/Structural/README.po b/locale/ru/LC_MESSAGES/Structural/README.po index 2d2af2d..928301e 100644 --- a/locale/ru/LC_MESSAGES/Structural/README.po +++ b/locale/ru/LC_MESSAGES/Structural/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/ru/LC_MESSAGES/Structural/Registry/README.po b/locale/ru/LC_MESSAGES/Structural/Registry/README.po index 8cff9f1..843138c 100644 --- a/locale/ru/LC_MESSAGES/Structural/Registry/README.po +++ b/locale/ru/LC_MESSAGES/Structural/Registry/README.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-05-28 18:54+0200\n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/Registry/README.rst:2 -msgid "`Registry`_" +msgid "`Registry`__" msgstr "" #: ../../Structural/Registry/README.rst:5 From 47038289508e968c4cccb03d8967648a52b4b2cf Mon Sep 17 00:00:00 2001 From: Faust Date: Fri, 29 May 2015 12:43:32 +0200 Subject: [PATCH 030/127] add Chinese translation initial files --- .gitignore | 1 + .../ChainOfResponsibilities/README.po | 90 ++++++++++++++ .../LC_MESSAGES/Behavioral/Command/README.po | 99 ++++++++++++++++ .../LC_MESSAGES/Behavioral/Iterator/README.po | 83 +++++++++++++ .../LC_MESSAGES/Behavioral/Mediator/README.po | 78 +++++++++++++ .../LC_MESSAGES/Behavioral/Memento/README.po | 85 ++++++++++++++ .../Behavioral/NullObject/README.po | 103 ++++++++++++++++ .../LC_MESSAGES/Behavioral/Observer/README.po | 75 ++++++++++++ locale/zh_CN/LC_MESSAGES/Behavioral/README.po | 24 ++++ .../Behavioral/Specification/README.po | 84 +++++++++++++ .../LC_MESSAGES/Behavioral/State/README.po | 63 ++++++++++ .../LC_MESSAGES/Behavioral/Strategy/README.po | 92 +++++++++++++++ .../Behavioral/TemplateMethod/README.po | 83 +++++++++++++ .../LC_MESSAGES/Behavioral/Visitor/README.po | 75 ++++++++++++ .../Creational/AbstractFactory/README.po | 91 +++++++++++++++ .../LC_MESSAGES/Creational/Builder/README.po | 110 ++++++++++++++++++ .../Creational/FactoryMethod/README.po | 90 ++++++++++++++ .../LC_MESSAGES/Creational/Multiton/README.po | 64 ++++++++++ .../LC_MESSAGES/Creational/Pool/README.po | 81 +++++++++++++ .../Creational/Prototype/README.po | 68 +++++++++++ locale/zh_CN/LC_MESSAGES/Creational/README.po | 25 ++++ .../Creational/SimpleFactory/README.po | 72 ++++++++++++ .../Creational/Singleton/README.po | 75 ++++++++++++ .../Creational/StaticFactory/README.po | 75 ++++++++++++ .../LC_MESSAGES/More/Delegation/README.po | 60 ++++++++++ locale/zh_CN/LC_MESSAGES/More/README.po | 16 +++ .../LC_MESSAGES/More/Repository/README.po | 76 ++++++++++++ .../LC_MESSAGES/More/ServiceLocator/README.po | 94 +++++++++++++++ locale/zh_CN/LC_MESSAGES/README.po | 99 ++++++++++++++++ .../LC_MESSAGES/Structural/Adapter/README.po | 82 +++++++++++++ .../LC_MESSAGES/Structural/Bridge/README.po | 78 +++++++++++++ .../Structural/Composite/README.po | 78 +++++++++++++ .../Structural/DataMapper/README.po | 77 ++++++++++++ .../Structural/Decorator/README.po | 78 +++++++++++++ .../Structural/DependencyInjection/README.po | 107 +++++++++++++++++ .../LC_MESSAGES/Structural/Facade/README.po | 87 ++++++++++++++ .../Structural/FluentInterface/README.po | 66 +++++++++++ .../LC_MESSAGES/Structural/Proxy/README.po | 59 ++++++++++ locale/zh_CN/LC_MESSAGES/Structural/README.po | 23 ++++ .../LC_MESSAGES/Structural/Registry/README.po | 67 +++++++++++ 40 files changed, 2933 insertions(+) create mode 100644 locale/zh_CN/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Behavioral/Command/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Behavioral/Iterator/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Behavioral/Mediator/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Behavioral/Memento/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Behavioral/NullObject/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Behavioral/Observer/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Behavioral/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Behavioral/Specification/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Behavioral/State/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Behavioral/Strategy/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Behavioral/TemplateMethod/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Behavioral/Visitor/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Creational/AbstractFactory/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Creational/Builder/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Creational/FactoryMethod/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Creational/Multiton/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Creational/Pool/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Creational/Prototype/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Creational/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Creational/SimpleFactory/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Creational/Singleton/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Creational/StaticFactory/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/More/Delegation/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/More/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/More/Repository/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/More/ServiceLocator/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Structural/Adapter/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Structural/Bridge/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Structural/Composite/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Structural/DataMapper/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Structural/Decorator/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Structural/DependencyInjection/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Structural/Facade/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Structural/FluentInterface/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Structural/Proxy/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Structural/README.po create mode 100644 locale/zh_CN/LC_MESSAGES/Structural/Registry/README.po diff --git a/.gitignore b/.gitignore index 1466a8e..57f6f89 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ /nbproject /vendor/ _build/ +*.mo diff --git a/locale/zh_CN/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po b/locale/zh_CN/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po new file mode 100644 index 0000000..b5277a5 --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po @@ -0,0 +1,90 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:2 +msgid "`Chain Of Responsibilities`__" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:5 +msgid "Purpose:" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:7 +msgid "" +"To build a chain of objects to handle a call in sequential order. If one " +"object cannot handle a call, it delegates the call to the next in the chain " +"and so forth." +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:12 +msgid "Examples:" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:14 +msgid "" +"logging framework, where each chain element decides autonomously what to do " +"with a log message" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:16 +msgid "a Spam filter" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:17 +msgid "" +"Caching: first object is an instance of e.g. a Memcached Interface, if that " +"\"misses\" it delegates the call to the database interface" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:19 +msgid "" +"Yii Framework: CFilterChain is a chain of controller action filters. the " +"executing point is passed from one filter to the next along the chain, and " +"only if all filters say \"yes\", the action can be invoked at last." +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:25 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:32 +msgid "Code" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:34 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:36 +msgid "Request.php" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:42 +msgid "Handler.php" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:48 +msgid "Responsible/SlowStorage.php" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:54 +msgid "Responsible/FastStorage.php" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:61 +msgid "Test" +msgstr "" + +#: ../../Behavioral/ChainOfResponsibilities/README.rst:63 +msgid "Tests/ChainTest.php" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Behavioral/Command/README.po b/locale/zh_CN/LC_MESSAGES/Behavioral/Command/README.po new file mode 100644 index 0000000..29319a3 --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Behavioral/Command/README.po @@ -0,0 +1,99 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Command/README.rst:2 +msgid "`Command`__" +msgstr "" + +#: ../../Behavioral/Command/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Command/README.rst:7 +msgid "To encapsulate invocation and decoupling." +msgstr "" + +#: ../../Behavioral/Command/README.rst:9 +msgid "" +"We have an Invoker and a Receiver. This pattern uses a \"Command\" to " +"delegate the method call against the Receiver and presents the same method " +"\"execute\". Therefore, the Invoker just knows to call \"execute\" to " +"process the Command of the client. The Receiver is decoupled from the " +"Invoker." +msgstr "" + +#: ../../Behavioral/Command/README.rst:15 +msgid "" +"The second aspect of this pattern is the undo(), which undoes the method " +"execute(). Command can also be aggregated to combine more complex commands " +"with minimum copy-paste and relying on composition over inheritance." +msgstr "" + +#: ../../Behavioral/Command/README.rst:21 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Command/README.rst:23 +msgid "" +"A text editor : all events are Command which can be undone, stacked and " +"saved." +msgstr "" + +#: ../../Behavioral/Command/README.rst:25 +msgid "" +"Symfony2: SF2 Commands that can be run from the CLI are built with just the " +"Command pattern in mind" +msgstr "" + +#: ../../Behavioral/Command/README.rst:27 +msgid "" +"big CLI tools use subcommands to distribute various tasks and pack them in " +"\"modules\", each of these can be implemented with the Command pattern (e.g." +" vagrant)" +msgstr "" + +#: ../../Behavioral/Command/README.rst:32 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Command/README.rst:39 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Command/README.rst:41 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Command/README.rst:43 +msgid "CommandInterface.php" +msgstr "" + +#: ../../Behavioral/Command/README.rst:49 +msgid "HelloCommand.php" +msgstr "" + +#: ../../Behavioral/Command/README.rst:55 +msgid "Receiver.php" +msgstr "" + +#: ../../Behavioral/Command/README.rst:61 +msgid "Invoker.php" +msgstr "" + +#: ../../Behavioral/Command/README.rst:68 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Command/README.rst:70 +msgid "Tests/CommandTest.php" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Behavioral/Iterator/README.po b/locale/zh_CN/LC_MESSAGES/Behavioral/Iterator/README.po new file mode 100644 index 0000000..3000658 --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Behavioral/Iterator/README.po @@ -0,0 +1,83 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Iterator/README.rst:2 +msgid "`Iterator`__" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:7 +msgid "" +"To make an object iterable and to make it appear like a collection of " +"objects." +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:11 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:13 +msgid "" +"to process a file line by line by just running over all lines (which have an" +" object representation) for a file (which of course is an object, too)" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:18 +msgid "Note" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:20 +msgid "" +"Standard PHP Library (SPL) defines an interface Iterator which is best " +"suited for this! Often you would want to implement the Countable interface " +"too, to allow ``count($object)`` on your iterable object" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:25 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:32 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:34 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:36 +msgid "Book.php" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:42 +msgid "BookList.php" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:48 +msgid "BookListIterator.php" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:54 +msgid "BookListReverseIterator.php" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:61 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Iterator/README.rst:63 +msgid "Tests/IteratorTest.php" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Behavioral/Mediator/README.po b/locale/zh_CN/LC_MESSAGES/Behavioral/Mediator/README.po new file mode 100644 index 0000000..9c6694b --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Behavioral/Mediator/README.po @@ -0,0 +1,78 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Mediator/README.rst:2 +msgid "`Mediator`__" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:7 +msgid "" +"This pattern provides an easy to decouple many components working together. " +"It is a good alternative over Observer IF you have a \"central " +"intelligence\", like a controller (but not in the sense of the MVC)." +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:11 +msgid "" +"All components (called Colleague) are only coupled to the MediatorInterface " +"and it is a good thing because in OOP, one good friend is better than many. " +"This is the key-feature of this pattern." +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:16 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:23 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:25 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:27 +msgid "MediatorInterface.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:33 +msgid "Mediator.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:39 +msgid "Colleague.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:45 +msgid "Subsystem/Client.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:51 +msgid "Subsystem/Database.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:57 +msgid "Subsystem/Server.php" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:64 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Mediator/README.rst:66 +msgid "Tests/MediatorTest.php" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Behavioral/Memento/README.po b/locale/zh_CN/LC_MESSAGES/Behavioral/Memento/README.po new file mode 100644 index 0000000..913069a --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Behavioral/Memento/README.po @@ -0,0 +1,85 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Memento/README.rst:2 +msgid "`Memento`__" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:7 +msgid "" +"Provide the ability to restore an object to its previous state (undo via " +"rollback)." +msgstr "" + +#: ../../Behavioral/Memento/README.rst:10 +msgid "" +"The memento pattern is implemented with three objects: the originator, a " +"caretaker and a memento. The originator is some object that has an internal " +"state. The caretaker is going to do something to the originator, but wants " +"to be able to undo the change. The caretaker first asks the originator for a" +" memento object. Then it does whatever operation (or sequence of operations)" +" it was going to do. To roll back to the state before the operations, it " +"returns the memento object to the originator. The memento object itself is " +"an opaque object (one which the caretaker cannot, or should not, change). " +"When using this pattern, care should be taken if the originator may change " +"other objects or resources - the memento pattern operates on a single " +"object." +msgstr "" + +#: ../../Behavioral/Memento/README.rst:23 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:25 +msgid "The seed of a pseudorandom number generator" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:26 +msgid "The state in a finite state machine" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:29 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:36 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:38 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:40 +msgid "Memento.php" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:46 +msgid "Originator.php" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:52 +msgid "Caretaker.php" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:59 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Memento/README.rst:61 +msgid "Tests/MementoTest.php" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Behavioral/NullObject/README.po b/locale/zh_CN/LC_MESSAGES/Behavioral/NullObject/README.po new file mode 100644 index 0000000..35b77f6 --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Behavioral/NullObject/README.po @@ -0,0 +1,103 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/NullObject/README.rst:2 +msgid "`Null Object`__" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:7 +msgid "" +"NullObject is not a GoF design pattern but a schema which appears frequently" +" enough to be considered a pattern. It has the following benefits:" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:11 +msgid "Client code is simplified" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:12 +msgid "Reduces the chance of null pointer exceptions" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:13 +msgid "Fewer conditionals require less test cases" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:15 +msgid "" +"Methods that return an object or null should instead return an object or " +"``NullObject``. ``NullObject``\\ s simplify boilerplate code such as ``if " +"(!is_null($obj)) { $obj->callSomething(); }`` to just " +"``$obj->callSomething();`` by eliminating the conditional check in client " +"code." +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:22 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:24 +msgid "Symfony2: null logger of profiler" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:25 +msgid "Symfony2: null output in Symfony/Console" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:26 +msgid "null handler in a Chain of Responsibilities pattern" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:27 +msgid "null command in a Command pattern" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:30 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:37 +msgid "Code" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:39 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:41 +msgid "Service.php" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:47 +msgid "LoggerInterface.php" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:53 +msgid "PrintLogger.php" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:59 +msgid "NullLogger.php" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:66 +msgid "Test" +msgstr "" + +#: ../../Behavioral/NullObject/README.rst:68 +msgid "Tests/LoggerTest.php" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Behavioral/Observer/README.po b/locale/zh_CN/LC_MESSAGES/Behavioral/Observer/README.po new file mode 100644 index 0000000..6aea8e9 --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Behavioral/Observer/README.po @@ -0,0 +1,75 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Observer/README.rst:2 +msgid "`Observer`__" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:7 +msgid "" +"To implement a publish/subscribe behaviour to an object, whenever a " +"\"Subject\" object changes it's state, the attached \"Observers\" will be " +"notified. It is used to shorten the amount of coupled objects and uses loose" +" coupling instead." +msgstr "" + +#: ../../Behavioral/Observer/README.rst:13 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:15 +msgid "" +"a message queue system is observed to show the progress of a job in a GUI" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:19 +msgid "Note" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:21 +msgid "" +"PHP already defines two interfaces that can help to implement this pattern: " +"SplObserver and SplSubject." +msgstr "" + +#: ../../Behavioral/Observer/README.rst:25 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:32 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:34 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:36 +msgid "User.php" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:42 +msgid "UserObserver.php" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:49 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Observer/README.rst:51 +msgid "Tests/ObserverTest.php" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Behavioral/README.po b/locale/zh_CN/LC_MESSAGES/Behavioral/README.po new file mode 100644 index 0000000..bd66758 --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Behavioral/README.po @@ -0,0 +1,24 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/README.rst:2 +msgid "Behavioral" +msgstr "" + +#: ../../Behavioral/README.rst:4 +msgid "" +"In software engineering, behavioral design patterns are design patterns that" +" identify common communication patterns between objects and realize these " +"patterns. By doing so, these patterns increase flexibility in carrying out " +"this communication." +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Behavioral/Specification/README.po b/locale/zh_CN/LC_MESSAGES/Behavioral/Specification/README.po new file mode 100644 index 0000000..54e3b64 --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Behavioral/Specification/README.po @@ -0,0 +1,84 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Specification/README.rst:2 +msgid "`Specification`__" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:7 +msgid "" +"Builds a clear specification of business rules, where objects can be checked" +" against. The composite specification class has one method called " +"``isSatisfiedBy`` that returns either true or false depending on whether the" +" given object satisfies the specification." +msgstr "" + +#: ../../Behavioral/Specification/README.rst:13 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:15 +msgid "`RulerZ `__" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:18 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:25 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:27 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:29 +msgid "Item.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:35 +msgid "SpecificationInterface.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:41 +msgid "AbstractSpecification.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:47 +msgid "Either.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:53 +msgid "PriceSpecification.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:59 +msgid "Plus.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:65 +msgid "Not.php" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:72 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Specification/README.rst:74 +msgid "Tests/SpecificationTest.php" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Behavioral/State/README.po b/locale/zh_CN/LC_MESSAGES/Behavioral/State/README.po new file mode 100644 index 0000000..f71fbfa --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Behavioral/State/README.po @@ -0,0 +1,63 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/State/README.rst:2 +msgid "`State`__" +msgstr "" + +#: ../../Behavioral/State/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/State/README.rst:7 +msgid "" +"Encapsulate varying behavior for the same routine based on an object's " +"state. This can be a cleaner way for an object to change its behavior at " +"runtime without resorting to large monolithic conditional statements." +msgstr "" + +#: ../../Behavioral/State/README.rst:12 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/State/README.rst:19 +msgid "Code" +msgstr "" + +#: ../../Behavioral/State/README.rst:21 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/State/README.rst:23 +msgid "OrderController.php" +msgstr "" + +#: ../../Behavioral/State/README.rst:29 +msgid "OrderFactory.php" +msgstr "" + +#: ../../Behavioral/State/README.rst:35 +msgid "OrderInterface.php" +msgstr "" + +#: ../../Behavioral/State/README.rst:41 +msgid "ShippingOrder.php" +msgstr "" + +#: ../../Behavioral/State/README.rst:47 +msgid "CreateOrder.php" +msgstr "" + +#: ../../Behavioral/State/README.rst:54 +msgid "Test" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Behavioral/Strategy/README.po b/locale/zh_CN/LC_MESSAGES/Behavioral/Strategy/README.po new file mode 100644 index 0000000..dd5797e --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Behavioral/Strategy/README.po @@ -0,0 +1,92 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Strategy/README.rst:2 +msgid "`Strategy`__" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:5 +msgid "Terminology:" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:7 +msgid "Context" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:8 +msgid "Strategy" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:9 +msgid "Concrete Strategy" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:12 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:14 +msgid "" +"To separate strategies and to enable fast switching between them. Also this " +"pattern is a good alternative to inheritance (instead of having an abstract " +"class that is extended)." +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:19 +msgid "Examples" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:21 +msgid "sorting a list of objects, one strategy by date, the other by id" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:22 +msgid "" +"simplify unit testing: e.g. switching between file and in-memory storage" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:26 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:33 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:35 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:37 +msgid "ObjectCollection.php" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:43 +msgid "ComparatorInterface.php" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:49 +msgid "DateComparator.php" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:55 +msgid "IdComparator.php" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:62 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Strategy/README.rst:64 +msgid "Tests/StrategyTest.php" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Behavioral/TemplateMethod/README.po b/locale/zh_CN/LC_MESSAGES/Behavioral/TemplateMethod/README.po new file mode 100644 index 0000000..4f6fa81 --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Behavioral/TemplateMethod/README.po @@ -0,0 +1,83 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/TemplateMethod/README.rst:2 +msgid "`Template Method`__" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:7 +msgid "Template Method is a behavioral design pattern." +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:9 +msgid "" +"Perhaps you have encountered it many times already. The idea is to let " +"subclasses of this abstract template \"finish\" the behavior of an " +"algorithm." +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:13 +msgid "" +"A.k.a the \"Hollywood principle\": \"Don't call us, we call you.\" This " +"class is not called by subclasses but the inverse. How? With abstraction of " +"course." +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:17 +msgid "" +"In other words, this is a skeleton of algorithm, well-suited for framework " +"libraries. The user has just to implement one method and the superclass do " +"the job." +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:21 +msgid "" +"It is an easy way to decouple concrete classes and reduce copy-paste, that's" +" why you'll find it everywhere." +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:25 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:32 +msgid "Code" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:34 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:36 +msgid "Journey.php" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:42 +msgid "BeachJourney.php" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:48 +msgid "CityJourney.php" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:55 +msgid "Test" +msgstr "" + +#: ../../Behavioral/TemplateMethod/README.rst:57 +msgid "Tests/JourneyTest.php" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Behavioral/Visitor/README.po b/locale/zh_CN/LC_MESSAGES/Behavioral/Visitor/README.po new file mode 100644 index 0000000..cab0ea9 --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Behavioral/Visitor/README.po @@ -0,0 +1,75 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Behavioral/Visitor/README.rst:2 +msgid "`Visitor`__" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:7 +msgid "" +"The Visitor Pattern lets you outsource operations on objects to other " +"objects. The main reason to do this is to keep a separation of concerns. But" +" classes have to define a contract to allow visitors (the ``Role::accept`` " +"method in the example)." +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:12 +msgid "" +"The contract is an abstract class but you can have also a clean interface. " +"In that case, each Visitor has to choose itself which method to invoke on " +"the visitor." +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:17 +msgid "UML Diagram" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:24 +msgid "Code" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:26 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:28 +msgid "RoleVisitorInterface.php" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:34 +msgid "RolePrintVisitor.php" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:40 +msgid "Role.php" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:46 +msgid "User.php" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:52 +msgid "Group.php" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:59 +msgid "Test" +msgstr "" + +#: ../../Behavioral/Visitor/README.rst:61 +msgid "Tests/VisitorTest.php" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Creational/AbstractFactory/README.po b/locale/zh_CN/LC_MESSAGES/Creational/AbstractFactory/README.po new file mode 100644 index 0000000..803e2fb --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Creational/AbstractFactory/README.po @@ -0,0 +1,91 @@ +# +# FULL NAME , 2015. +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: 2015-05-29 12:39+0200\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Gtranslator 2.91.6\n" + +#: ../../Creational/AbstractFactory/README.rst:2 +msgid "`Abstract Factory`__" +msgstr "`抽象工厂`__" + +#: ../../Creational/AbstractFactory/README.rst:5 +msgid "Purpose" +msgstr "目的" + +#: ../../Creational/AbstractFactory/README.rst:7 +msgid "" +"To create series of related or dependent objects without specifying their " +"concrete classes. Usually the created classes all implement the same " +"interface. The client of the abstract factory does not care about how these " +"objects are created, he just knows how they go together." +msgstr "翻译。。。" + +#: ../../Creational/AbstractFactory/README.rst:13 +msgid "UML Diagram" +msgstr "UML 图" + +#: ../../Creational/AbstractFactory/README.rst:20 +msgid "Code" +msgstr "代码" + +#: ../../Creational/AbstractFactory/README.rst:22 +msgid "You can also find these code on `GitHub`_" +msgstr "在 `GitHub`_ 上查看代码" + +#: ../../Creational/AbstractFactory/README.rst:24 +msgid "AbstractFactory.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:30 +msgid "JsonFactory.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:36 +msgid "HtmlFactory.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:42 +msgid "MediaInterface.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:48 +msgid "Picture.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:54 +msgid "Text.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:60 +msgid "Json/Picture.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:66 +msgid "Json/Text.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:72 +msgid "Html/Picture.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:78 +msgid "Html/Text.php" +msgstr "" + +#: ../../Creational/AbstractFactory/README.rst:85 +msgid "Test" +msgstr "测试" + +#: ../../Creational/AbstractFactory/README.rst:87 +msgid "Tests/AbstractFactoryTest.php" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Creational/Builder/README.po b/locale/zh_CN/LC_MESSAGES/Creational/Builder/README.po new file mode 100644 index 0000000..79d4fe3 --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Creational/Builder/README.po @@ -0,0 +1,110 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/Builder/README.rst:2 +msgid "`Builder`__" +msgstr "" + +#: ../../Creational/Builder/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/Builder/README.rst:7 +msgid "Builder is an interface that build parts of a complex object." +msgstr "" + +#: ../../Creational/Builder/README.rst:9 +msgid "" +"Sometimes, if the builder has a better knowledge of what it builds, this " +"interface could be an abstract class with default methods (aka adapter)." +msgstr "" + +#: ../../Creational/Builder/README.rst:12 +msgid "" +"If you have a complex inheritance tree for objects, it is logical to have a " +"complex inheritance tree for builders too." +msgstr "" + +#: ../../Creational/Builder/README.rst:15 +msgid "" +"Note: Builders have often a fluent interface, see the mock builder of " +"PHPUnit for example." +msgstr "" + +#: ../../Creational/Builder/README.rst:19 +msgid "Examples" +msgstr "" + +#: ../../Creational/Builder/README.rst:21 +msgid "PHPUnit: Mock Builder" +msgstr "" + +#: ../../Creational/Builder/README.rst:24 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/Builder/README.rst:31 +msgid "Code" +msgstr "" + +#: ../../Creational/Builder/README.rst:33 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/Builder/README.rst:35 +msgid "Director.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:41 +msgid "BuilderInterface.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:47 +msgid "BikeBuilder.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:53 +msgid "CarBuilder.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:59 +msgid "Parts/Vehicle.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:65 +msgid "Parts/Bike.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:71 +msgid "Parts/Car.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:77 +msgid "Parts/Engine.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:83 +msgid "Parts/Wheel.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:89 +msgid "Parts/Door.php" +msgstr "" + +#: ../../Creational/Builder/README.rst:96 +msgid "Test" +msgstr "" + +#: ../../Creational/Builder/README.rst:98 +msgid "Tests/DirectorTest.php" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Creational/FactoryMethod/README.po b/locale/zh_CN/LC_MESSAGES/Creational/FactoryMethod/README.po new file mode 100644 index 0000000..b65c56b --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Creational/FactoryMethod/README.po @@ -0,0 +1,90 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/FactoryMethod/README.rst:2 +msgid "`Factory Method`__" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:7 +msgid "" +"The good point over the SimpleFactory is you can subclass it to implement " +"different ways to create objects" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:10 +msgid "For simple case, this abstract class could be just an interface" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:12 +msgid "" +"This pattern is a \"real\" Design Pattern because it achieves the " +"\"Dependency Inversion Principle\" a.k.a the \"D\" in S.O.L.I.D principles." +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:15 +msgid "" +"It means the FactoryMethod class depends on abstractions, not concrete " +"classes. This is the real trick compared to SimpleFactory or StaticFactory." +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:31 +msgid "FactoryMethod.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:37 +msgid "ItalianFactory.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:43 +msgid "GermanFactory.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:49 +msgid "VehicleInterface.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:55 +msgid "Porsche.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:61 +msgid "Bicycle.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:67 +msgid "Ferrari.php" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:74 +msgid "Test" +msgstr "" + +#: ../../Creational/FactoryMethod/README.rst:76 +msgid "Tests/FactoryMethodTest.php" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Creational/Multiton/README.po b/locale/zh_CN/LC_MESSAGES/Creational/Multiton/README.po new file mode 100644 index 0000000..702271d --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Creational/Multiton/README.po @@ -0,0 +1,64 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/Multiton/README.rst:2 +msgid "Multiton" +msgstr "" + +#: ../../Creational/Multiton/README.rst:4 +msgid "" +"**THIS IS CONSIDERED TO BE AN ANTI-PATTERN! FOR BETTER TESTABILITY AND " +"MAINTAINABILITY USE DEPENDENCY INJECTION!**" +msgstr "" + +#: ../../Creational/Multiton/README.rst:8 +msgid "Purpose" +msgstr "" + +#: ../../Creational/Multiton/README.rst:10 +msgid "" +"To have only a list of named instances that are used, like a singleton but " +"with n instances." +msgstr "" + +#: ../../Creational/Multiton/README.rst:14 +msgid "Examples" +msgstr "" + +#: ../../Creational/Multiton/README.rst:16 +msgid "2 DB Connectors, e.g. one for MySQL, the other for SQLite" +msgstr "" + +#: ../../Creational/Multiton/README.rst:17 +msgid "multiple Loggers (one for debug messages, one for errors)" +msgstr "" + +#: ../../Creational/Multiton/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/Multiton/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Creational/Multiton/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/Multiton/README.rst:31 +msgid "Multiton.php" +msgstr "" + +#: ../../Creational/Multiton/README.rst:38 +msgid "Test" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Creational/Pool/README.po b/locale/zh_CN/LC_MESSAGES/Creational/Pool/README.po new file mode 100644 index 0000000..8defedd --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Creational/Pool/README.po @@ -0,0 +1,81 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/Pool/README.rst:2 +msgid "`Pool`__" +msgstr "" + +#: ../../Creational/Pool/README.rst:4 +msgid "" +"The **object pool pattern** is a software creational design pattern that " +"uses a set of initialized objects kept ready to use – a \"pool\" – rather " +"than allocating and destroying them on demand. A client of the pool will " +"request an object from the pool and perform operations on the returned " +"object. When the client has finished, it returns the object, which is a " +"specific type of factory object, to the pool rather than destroying it." +msgstr "" + +#: ../../Creational/Pool/README.rst:11 +msgid "" +"Object pooling can offer a significant performance boost in situations where" +" the cost of initializing a class instance is high, the rate of " +"instantiation of a class is high, and the number of instances in use at any " +"one time is low. The pooled object is obtained in predictable time when " +"creation of the new objects (especially over network) may take variable " +"time." +msgstr "" + +#: ../../Creational/Pool/README.rst:18 +msgid "" +"However these benefits are mostly true for objects that are expensive with " +"respect to time, such as database connections, socket connections, threads " +"and large graphic objects like fonts or bitmaps. In certain situations, " +"simple object pooling (that hold no external resources, but only occupy " +"memory) may not be efficient and could decrease performance." +msgstr "" + +#: ../../Creational/Pool/README.rst:25 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/Pool/README.rst:32 +msgid "Code" +msgstr "" + +#: ../../Creational/Pool/README.rst:34 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/Pool/README.rst:36 +msgid "Pool.php" +msgstr "" + +#: ../../Creational/Pool/README.rst:42 +msgid "Processor.php" +msgstr "" + +#: ../../Creational/Pool/README.rst:48 +msgid "Worker.php" +msgstr "" + +#: ../../Creational/Pool/README.rst:55 +msgid "Test" +msgstr "" + +#: ../../Creational/Pool/README.rst:57 +msgid "Tests/PoolTest.php" +msgstr "" + +#: ../../Creational/Pool/README.rst:63 +msgid "Tests/TestWorker.php" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Creational/Prototype/README.po b/locale/zh_CN/LC_MESSAGES/Creational/Prototype/README.po new file mode 100644 index 0000000..fac09ef --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Creational/Prototype/README.po @@ -0,0 +1,68 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/Prototype/README.rst:2 +msgid "`Prototype`__" +msgstr "" + +#: ../../Creational/Prototype/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/Prototype/README.rst:7 +msgid "" +"To avoid the cost of creating objects the standard way (new Foo()) and " +"instead create a prototype and clone it." +msgstr "" + +#: ../../Creational/Prototype/README.rst:11 +msgid "Examples" +msgstr "" + +#: ../../Creational/Prototype/README.rst:13 +msgid "" +"Large amounts of data (e.g. create 1,000,000 rows in a database at once via " +"a ORM)." +msgstr "" + +#: ../../Creational/Prototype/README.rst:17 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/Prototype/README.rst:24 +msgid "Code" +msgstr "" + +#: ../../Creational/Prototype/README.rst:26 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/Prototype/README.rst:28 +msgid "index.php" +msgstr "" + +#: ../../Creational/Prototype/README.rst:34 +msgid "BookPrototype.php" +msgstr "" + +#: ../../Creational/Prototype/README.rst:40 +msgid "BarBookPrototype.php" +msgstr "" + +#: ../../Creational/Prototype/README.rst:46 +msgid "FooBookPrototype.php" +msgstr "" + +#: ../../Creational/Prototype/README.rst:53 +msgid "Test" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Creational/README.po b/locale/zh_CN/LC_MESSAGES/Creational/README.po new file mode 100644 index 0000000..d947d57 --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Creational/README.po @@ -0,0 +1,25 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/README.rst:2 +msgid "Creational" +msgstr "" + +#: ../../Creational/README.rst:4 +msgid "" +"In software engineering, creational design patterns are design patterns that" +" deal with object creation mechanisms, trying to create objects in a manner " +"suitable to the situation. The basic form of object creation could result in" +" design problems or added complexity to the design. Creational design " +"patterns solve this problem by somehow controlling this object creation." +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Creational/SimpleFactory/README.po b/locale/zh_CN/LC_MESSAGES/Creational/SimpleFactory/README.po new file mode 100644 index 0000000..d011ad6 --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Creational/SimpleFactory/README.po @@ -0,0 +1,72 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/SimpleFactory/README.rst:2 +msgid "Simple Factory" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:7 +msgid "ConcreteFactory is a simple factory pattern." +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:9 +msgid "" +"It differs from the static factory because it is NOT static and as you know:" +" static => global => evil!" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:12 +msgid "" +"Therefore, you can have multiple factories, differently parametrized, you " +"can subclass it and you can mock-up it." +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:16 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:23 +msgid "Code" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:25 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:27 +msgid "ConcreteFactory.php" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:33 +msgid "VehicleInterface.php" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:39 +msgid "Bicycle.php" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:45 +msgid "Scooter.php" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:52 +msgid "Test" +msgstr "" + +#: ../../Creational/SimpleFactory/README.rst:54 +msgid "Tests/SimpleFactoryTest.php" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Creational/Singleton/README.po b/locale/zh_CN/LC_MESSAGES/Creational/Singleton/README.po new file mode 100644 index 0000000..5d108ca --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Creational/Singleton/README.po @@ -0,0 +1,75 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/Singleton/README.rst:2 +msgid "`Singleton`__" +msgstr "" + +#: ../../Creational/Singleton/README.rst:4 +msgid "" +"**THIS IS CONSIDERED TO BE AN ANTI-PATTERN! FOR BETTER TESTABILITY AND " +"MAINTAINABILITY USE DEPENDENCY INJECTION!**" +msgstr "" + +#: ../../Creational/Singleton/README.rst:8 +msgid "Purpose" +msgstr "" + +#: ../../Creational/Singleton/README.rst:10 +msgid "" +"To have only one instance of this object in the application that will handle" +" all calls." +msgstr "" + +#: ../../Creational/Singleton/README.rst:14 +msgid "Examples" +msgstr "" + +#: ../../Creational/Singleton/README.rst:16 +msgid "DB Connector" +msgstr "" + +#: ../../Creational/Singleton/README.rst:17 +msgid "" +"Logger (may also be a Multiton if there are many log files for several " +"purposes)" +msgstr "" + +#: ../../Creational/Singleton/README.rst:19 +msgid "" +"Lock file for the application (there is only one in the filesystem ...)" +msgstr "" + +#: ../../Creational/Singleton/README.rst:23 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/Singleton/README.rst:30 +msgid "Code" +msgstr "" + +#: ../../Creational/Singleton/README.rst:32 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/Singleton/README.rst:34 +msgid "Singleton.php" +msgstr "" + +#: ../../Creational/Singleton/README.rst:41 +msgid "Test" +msgstr "" + +#: ../../Creational/Singleton/README.rst:43 +msgid "Tests/SingletonTest.php" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Creational/StaticFactory/README.po b/locale/zh_CN/LC_MESSAGES/Creational/StaticFactory/README.po new file mode 100644 index 0000000..4a6f64e --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Creational/StaticFactory/README.po @@ -0,0 +1,75 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Creational/StaticFactory/README.rst:2 +msgid "Static Factory" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:7 +msgid "" +"Similar to the AbstractFactory, this pattern is used to create series of " +"related or dependent objects. The difference between this and the abstract " +"factory pattern is that the static factory pattern uses just one static " +"method to create all types of objects it can create. It is usually named " +"``factory`` or ``build``." +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:14 +msgid "Examples" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:16 +msgid "" +"Zend Framework: ``Zend_Cache_Backend`` or ``_Frontend`` use a factory method" +" create cache backends or frontends" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:31 +msgid "StaticFactory.php" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:37 +msgid "FormatterInterface.php" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:43 +msgid "FormatString.php" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:49 +msgid "FormatNumber.php" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:56 +msgid "Test" +msgstr "" + +#: ../../Creational/StaticFactory/README.rst:58 +msgid "Tests/StaticFactoryTest.php" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/More/Delegation/README.po b/locale/zh_CN/LC_MESSAGES/More/Delegation/README.po new file mode 100644 index 0000000..169e8fd --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/More/Delegation/README.po @@ -0,0 +1,60 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../More/Delegation/README.rst:2 +msgid "`Delegation`__" +msgstr "" + +#: ../../More/Delegation/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../More/Delegation/README.rst:7 ../../More/Delegation/README.rst:12 +msgid "..." +msgstr "" + +#: ../../More/Delegation/README.rst:10 +msgid "Examples" +msgstr "" + +#: ../../More/Delegation/README.rst:15 +msgid "UML Diagram" +msgstr "" + +#: ../../More/Delegation/README.rst:22 +msgid "Code" +msgstr "" + +#: ../../More/Delegation/README.rst:24 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../More/Delegation/README.rst:26 +msgid "Usage.php" +msgstr "" + +#: ../../More/Delegation/README.rst:32 +msgid "TeamLead.php" +msgstr "" + +#: ../../More/Delegation/README.rst:38 +msgid "JuniorDeveloper.php" +msgstr "" + +#: ../../More/Delegation/README.rst:45 +msgid "Test" +msgstr "" + +#: ../../More/Delegation/README.rst:47 +msgid "Tests/DelegationTest.php" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/More/README.po b/locale/zh_CN/LC_MESSAGES/More/README.po new file mode 100644 index 0000000..c3585d8 --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/More/README.po @@ -0,0 +1,16 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../More/README.rst:2 +msgid "More" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/More/Repository/README.po b/locale/zh_CN/LC_MESSAGES/More/Repository/README.po new file mode 100644 index 0000000..d9ecc90 --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/More/Repository/README.po @@ -0,0 +1,76 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../More/Repository/README.rst:2 +msgid "Repository" +msgstr "" + +#: ../../More/Repository/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../More/Repository/README.rst:7 +msgid "" +"Mediates between the domain and data mapping layers using a collection-like " +"interface for accessing domain objects. Repository encapsulates the set of " +"objects persisted in a data store and the operations performed over them, " +"providing a more object-oriented view of the persistence layer. Repository " +"also supports the objective of achieving a clean separation and one-way " +"dependency between the domain and data mapping layers." +msgstr "" + +#: ../../More/Repository/README.rst:16 +msgid "Examples" +msgstr "" + +#: ../../More/Repository/README.rst:18 +msgid "" +"Doctrine 2 ORM: there is Repository that mediates between Entity and DBAL " +"and contains methods to retrieve objects" +msgstr "" + +#: ../../More/Repository/README.rst:20 +msgid "Laravel Framework" +msgstr "" + +#: ../../More/Repository/README.rst:23 +msgid "UML Diagram" +msgstr "" + +#: ../../More/Repository/README.rst:30 +msgid "Code" +msgstr "" + +#: ../../More/Repository/README.rst:32 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../More/Repository/README.rst:34 +msgid "Post.php" +msgstr "" + +#: ../../More/Repository/README.rst:40 +msgid "PostRepository.php" +msgstr "" + +#: ../../More/Repository/README.rst:46 +msgid "Storage.php" +msgstr "" + +#: ../../More/Repository/README.rst:52 +msgid "MemoryStorage.php" +msgstr "" + +#: ../../More/Repository/README.rst:59 +msgid "Test" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/More/ServiceLocator/README.po b/locale/zh_CN/LC_MESSAGES/More/ServiceLocator/README.po new file mode 100644 index 0000000..9808a92 --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/More/ServiceLocator/README.po @@ -0,0 +1,94 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../More/ServiceLocator/README.rst:2 +msgid "`Service Locator`__" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:7 +msgid "" +"To implement a loosely coupled architecture in order to get better testable," +" maintainable and extendable code. DI pattern and Service Locator pattern " +"are an implementation of the Inverse of Control pattern." +msgstr "" + +#: ../../More/ServiceLocator/README.rst:12 +msgid "Usage" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:14 +msgid "" +"With ``ServiceLocator`` you can register a service for a given interface. By" +" using the interface you can retrieve the service and use it in the classes " +"of the application without knowing its implementation. You can configure and" +" inject the Service Locator object on bootstrap." +msgstr "" + +#: ../../More/ServiceLocator/README.rst:20 +msgid "Examples" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:22 +msgid "" +"Zend Framework 2 uses Service Locator to create and share services used in " +"the framework(i.e. EventManager, ModuleManager, all custom user services " +"provided by modules, etc...)" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:27 +msgid "UML Diagram" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:34 +msgid "Code" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:36 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:38 +msgid "ServiceLocatorInterface.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:44 +msgid "ServiceLocator.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:50 +msgid "LogServiceInterface.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:56 +msgid "LogService.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:62 +msgid "DatabaseServiceInterface.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:68 +msgid "DatabaseService.php" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:75 +msgid "Test" +msgstr "" + +#: ../../More/ServiceLocator/README.rst:77 +msgid "Tests/ServiceLocatorTest.php" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/README.po b/locale/zh_CN/LC_MESSAGES/README.po new file mode 100644 index 0000000..c647e56 --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/README.po @@ -0,0 +1,99 @@ +# +# FULL NAME , 2015. +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: 2015-05-29 12:37+0200\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Gtranslator 2.91.6\n" + +#: ../../README.rst:5 +msgid "DesignPatternsPHP" +msgstr "PHP设计模式范例" + +#: ../../README.rst:11 +msgid "" +"This is a collection of known `design patterns`_ and some sample code how to " +"implement them in PHP. Every pattern has a small list of examples (most of " +"them from Zend Framework, Symfony2 or Doctrine2 as I'm most familiar with " +"this software)." +msgstr "" +"这里收集了一些知名的 `设计模式`_ 以及它们对应的 PHP 实现的代码,每个模式都附" +"有一个实际的例子(大多来源于Zend Framework, Symfony2 和 Doctrine2等)。" + +#: ../../README.rst:16 +msgid "" +"I think the problem with patterns is that often people do know them but " +"don't know when to apply which." +msgstr "翻译。。。" + +#: ../../README.rst:20 +msgid "Patterns" +msgstr "模式" + +#: ../../README.rst:22 +msgid "" +"The patterns can be structured in roughly three different categories. Please " +"click on **the title of every pattern's page** for a full explanation of the " +"pattern on Wikipedia." +msgstr "" +"模式可以简单的被分为三大类。你可以点击每个模式页面下的标题来转到维基百科页" +"面,来获取关于该模式更为详细的解释。" + +#: ../../README.rst:35 +msgid "Contribute" +msgstr "贡献" + +#: ../../README.rst:37 +msgid "" +"Please feel free to fork and extend existing or add your own examples and " +"send a pull request with your changes! To establish a consistent code " +"quality, please check your code using `PHP CodeSniffer`_ against `PSR2 " +"standard`_ using ``./vendor/bin/phpcs -p --standard=PSR2 --ignore=vendor .``." +msgstr "翻译。。。" + +#: ../../README.rst:44 +msgid "License" +msgstr "协议" + +#: ../../README.rst:46 +msgid "(The MIT License)" +msgstr "" + +#: ../../README.rst:48 +msgid "Copyright (c) 2014 `Dominik Liebler`_ and `contributors`_" +msgstr "" + +#: ../../README.rst:50 +msgid "" +"Permission is hereby granted, free of charge, to any person obtaining a copy " +"of this software and associated documentation files (the 'Software'), to " +"deal in the Software without restriction, including without limitation the " +"rights to use, copy, modify, merge, publish, distribute, sublicense, and/or " +"sell copies of the Software, and to permit persons to whom the Software is " +"furnished to do so, subject to the following conditions:" +msgstr "" + +#: ../../README.rst:58 +msgid "" +"The above copyright notice and this permission notice shall be included in " +"all copies or substantial portions of the Software." +msgstr "" + +#: ../../README.rst:61 +msgid "" +"THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR " +"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, " +"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE " +"AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER " +"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING " +"FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS " +"IN THE SOFTWARE." +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Structural/Adapter/README.po b/locale/zh_CN/LC_MESSAGES/Structural/Adapter/README.po new file mode 100644 index 0000000..b351fc9 --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Structural/Adapter/README.po @@ -0,0 +1,82 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Adapter/README.rst:2 +msgid "`Adapter / Wrapper`__" +msgstr "" + +#: ../../Structural/Adapter/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Adapter/README.rst:7 +msgid "" +"To translate one interface for a class into a compatible interface. An " +"adapter allows classes to work together that normally could not because of " +"incompatible interfaces by providing it's interface to clients while using " +"the original interface." +msgstr "" + +#: ../../Structural/Adapter/README.rst:13 +msgid "Examples" +msgstr "" + +#: ../../Structural/Adapter/README.rst:15 +msgid "DB Client libraries adapter" +msgstr "" + +#: ../../Structural/Adapter/README.rst:16 +msgid "" +"using multiple different webservices and adapters normalize data so that the" +" outcome is the same for all" +msgstr "" + +#: ../../Structural/Adapter/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Adapter/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Structural/Adapter/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Adapter/README.rst:31 +msgid "PaperBookInterface.php" +msgstr "" + +#: ../../Structural/Adapter/README.rst:37 +msgid "Book.php" +msgstr "" + +#: ../../Structural/Adapter/README.rst:43 +msgid "EBookAdapter.php" +msgstr "" + +#: ../../Structural/Adapter/README.rst:49 +msgid "EBookInterface.php" +msgstr "" + +#: ../../Structural/Adapter/README.rst:55 +msgid "Kindle.php" +msgstr "" + +#: ../../Structural/Adapter/README.rst:62 +msgid "Test" +msgstr "" + +#: ../../Structural/Adapter/README.rst:64 +msgid "Tests/AdapterTest.php" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Structural/Bridge/README.po b/locale/zh_CN/LC_MESSAGES/Structural/Bridge/README.po new file mode 100644 index 0000000..a27619b --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Structural/Bridge/README.po @@ -0,0 +1,78 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Bridge/README.rst:2 +msgid "`Bridge`__" +msgstr "" + +#: ../../Structural/Bridge/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Bridge/README.rst:7 +msgid "" +"Decouple an abstraction from its implementation so that the two can vary " +"independently." +msgstr "" + +#: ../../Structural/Bridge/README.rst:11 +msgid "Sample:" +msgstr "" + +#: ../../Structural/Bridge/README.rst:13 +msgid "`Symfony DoctrineBridge `__" +msgstr "" + +#: ../../Structural/Bridge/README.rst:17 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Bridge/README.rst:24 +msgid "Code" +msgstr "" + +#: ../../Structural/Bridge/README.rst:26 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Bridge/README.rst:28 +msgid "Workshop.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:34 +msgid "Assemble.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:40 +msgid "Produce.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:46 +msgid "Vehicle.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:52 +msgid "Motorcycle.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:58 +msgid "Car.php" +msgstr "" + +#: ../../Structural/Bridge/README.rst:65 +msgid "Test" +msgstr "" + +#: ../../Structural/Bridge/README.rst:67 +msgid "Tests/BridgeTest.php" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Structural/Composite/README.po b/locale/zh_CN/LC_MESSAGES/Structural/Composite/README.po new file mode 100644 index 0000000..90ddd21 --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Structural/Composite/README.po @@ -0,0 +1,78 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Composite/README.rst:2 +msgid "`Composite`__" +msgstr "" + +#: ../../Structural/Composite/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Composite/README.rst:7 +msgid "" +"To treat a group of objects the same way as a single instance of the object." +msgstr "" + +#: ../../Structural/Composite/README.rst:11 +msgid "Examples" +msgstr "" + +#: ../../Structural/Composite/README.rst:13 +msgid "" +"a form class instance handles all its form elements like a single instance " +"of the form, when ``render()`` is called, it subsequently runs through all " +"its child elements and calls ``render()`` on them" +msgstr "" + +#: ../../Structural/Composite/README.rst:16 +msgid "" +"``Zend_Config``: a tree of configuration options, each one is a " +"``Zend_Config`` object itself" +msgstr "" + +#: ../../Structural/Composite/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Composite/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Structural/Composite/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Composite/README.rst:31 +msgid "FormElement.php" +msgstr "" + +#: ../../Structural/Composite/README.rst:37 +msgid "Form.php" +msgstr "" + +#: ../../Structural/Composite/README.rst:43 +msgid "InputElement.php" +msgstr "" + +#: ../../Structural/Composite/README.rst:49 +msgid "TextElement.php" +msgstr "" + +#: ../../Structural/Composite/README.rst:56 +msgid "Test" +msgstr "" + +#: ../../Structural/Composite/README.rst:58 +msgid "Tests/CompositeTest.php" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Structural/DataMapper/README.po b/locale/zh_CN/LC_MESSAGES/Structural/DataMapper/README.po new file mode 100644 index 0000000..5ccd9a3 --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Structural/DataMapper/README.po @@ -0,0 +1,77 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/DataMapper/README.rst:2 +msgid "`Data Mapper`__" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:7 +msgid "" +"A Data Mapper, is a Data Access Layer that performs bidirectional transfer " +"of data between a persistent data store (often a relational database) and an" +" in memory data representation (the domain layer). The goal of the pattern " +"is to keep the in memory representation and the persistent data store " +"independent of each other and the data mapper itself. The layer is composed " +"of one or more mappers (or Data Access Objects), performing the data " +"transfer. Mapper implementations vary in scope. Generic mappers will handle " +"many different domain entity types, dedicated mappers will handle one or a " +"few." +msgstr "" + +#: ../../Structural/DataMapper/README.rst:17 +msgid "" +"The key point of this pattern is, unlike Active Record pattern, the data " +"model follows Single Responsibility Principle." +msgstr "" + +#: ../../Structural/DataMapper/README.rst:21 +msgid "Examples" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:23 +msgid "" +"DB Object Relational Mapper (ORM) : Doctrine2 uses DAO named as " +"\"EntityRepository\"" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:27 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:34 +msgid "Code" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:36 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:38 +msgid "User.php" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:44 +msgid "UserMapper.php" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:51 +msgid "Test" +msgstr "" + +#: ../../Structural/DataMapper/README.rst:53 +msgid "Tests/DataMapperTest.php" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Structural/Decorator/README.po b/locale/zh_CN/LC_MESSAGES/Structural/Decorator/README.po new file mode 100644 index 0000000..0ecf351 --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Structural/Decorator/README.po @@ -0,0 +1,78 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Decorator/README.rst:2 +msgid "`Decorator`__" +msgstr "" + +#: ../../Structural/Decorator/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Decorator/README.rst:7 +msgid "To dynamically add new functionality to class instances." +msgstr "" + +#: ../../Structural/Decorator/README.rst:10 +msgid "Examples" +msgstr "" + +#: ../../Structural/Decorator/README.rst:12 +msgid "Zend Framework: decorators for ``Zend_Form_Element`` instances" +msgstr "" + +#: ../../Structural/Decorator/README.rst:13 +msgid "" +"Web Service Layer: Decorators JSON and XML for a REST service (in this case," +" only one of these should be allowed of course)" +msgstr "" + +#: ../../Structural/Decorator/README.rst:17 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Decorator/README.rst:24 +msgid "Code" +msgstr "" + +#: ../../Structural/Decorator/README.rst:26 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Decorator/README.rst:28 +msgid "RendererInterface.php" +msgstr "" + +#: ../../Structural/Decorator/README.rst:34 +msgid "Webservice.php" +msgstr "" + +#: ../../Structural/Decorator/README.rst:40 +msgid "Decorator.php" +msgstr "" + +#: ../../Structural/Decorator/README.rst:46 +msgid "RenderInXml.php" +msgstr "" + +#: ../../Structural/Decorator/README.rst:52 +msgid "RenderInJson.php" +msgstr "" + +#: ../../Structural/Decorator/README.rst:59 +msgid "Test" +msgstr "" + +#: ../../Structural/Decorator/README.rst:61 +msgid "Tests/DecoratorTest.php" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Structural/DependencyInjection/README.po b/locale/zh_CN/LC_MESSAGES/Structural/DependencyInjection/README.po new file mode 100644 index 0000000..0834846 --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Structural/DependencyInjection/README.po @@ -0,0 +1,107 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/DependencyInjection/README.rst:2 +msgid "`Dependency Injection`__" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:7 +msgid "" +"To implement a loosely coupled architecture in order to get better testable," +" maintainable and extendable code." +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:11 +msgid "Usage" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:13 +msgid "" +"Configuration gets injected and ``Connection`` will get all that it needs " +"from ``$config``. Without DI, the configuration would be created directly in" +" ``Connection``, which is not very good for testing and extending " +"``Connection``." +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:18 +msgid "" +"Notice we are following Inversion of control principle in ``Connection`` by " +"asking ``$config`` to implement ``Parameters`` interface. This decouples our" +" components. We don't care where the source of information comes from, we " +"only care that ``$config`` has certain methods to retrieve that information." +" Read more about Inversion of control `here " +"`__." +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:26 +msgid "Examples" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:28 +msgid "" +"The Doctrine2 ORM uses dependency injection e.g. for configuration that is " +"injected into a ``Connection`` object. For testing purposes, one can easily " +"create a mock object of the configuration and inject that into the " +"``Connection`` object" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:32 +msgid "" +"Symfony and Zend Framework 2 already have containers for DI that create " +"objects via a configuration array and inject them where needed (i.e. in " +"Controllers)" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:37 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:44 +msgid "Code" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:46 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:48 +msgid "AbstractConfig.php" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:54 +msgid "Parameters.php" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:60 +msgid "ArrayConfig.php" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:66 +msgid "Connection.php" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:73 +msgid "Test" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:75 +msgid "Tests/DependencyInjectionTest.php" +msgstr "" + +#: ../../Structural/DependencyInjection/README.rst:81 +msgid "Tests/config.php" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Structural/Facade/README.po b/locale/zh_CN/LC_MESSAGES/Structural/Facade/README.po new file mode 100644 index 0000000..1d78bf4 --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Structural/Facade/README.po @@ -0,0 +1,87 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Facade/README.rst:2 +msgid "`Facade`__" +msgstr "" + +#: ../../Structural/Facade/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Facade/README.rst:7 +msgid "" +"The primary goal of a Facade Pattern is not to avoid you to read the manual " +"of a complex API. It's only a side-effect. The first goal is to reduce " +"coupling and follow the Law of Demeter." +msgstr "" + +#: ../../Structural/Facade/README.rst:11 +msgid "" +"A Facade is meant to decouple a client and a sub-system by embedding many " +"(but sometimes just one) interface, and of course to reduce complexity." +msgstr "" + +#: ../../Structural/Facade/README.rst:15 +msgid "A facade does not forbid you the access to the sub-system" +msgstr "" + +#: ../../Structural/Facade/README.rst:16 +msgid "You can (you should) have multiple facades for one sub-system" +msgstr "" + +#: ../../Structural/Facade/README.rst:18 +msgid "" +"That's why a good facade has no ``new`` in it. If there are multiple " +"creations for each method, it is not a Facade, it's a Builder or a " +"[Abstract\\|Static\\|Simple] Factory [Method]." +msgstr "" + +#: ../../Structural/Facade/README.rst:22 +msgid "" +"The best facade has no ``new`` and a constructor with interface-type-hinted " +"parameters. If you need creation of new instances, use a Factory as " +"argument." +msgstr "" + +#: ../../Structural/Facade/README.rst:27 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Facade/README.rst:34 +msgid "Code" +msgstr "" + +#: ../../Structural/Facade/README.rst:36 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Facade/README.rst:38 +msgid "Facade.php" +msgstr "" + +#: ../../Structural/Facade/README.rst:44 +msgid "OsInterface.php" +msgstr "" + +#: ../../Structural/Facade/README.rst:50 +msgid "BiosInterface.php" +msgstr "" + +#: ../../Structural/Facade/README.rst:57 +msgid "Test" +msgstr "" + +#: ../../Structural/Facade/README.rst:59 +msgid "Tests/FacadeTest.php" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Structural/FluentInterface/README.po b/locale/zh_CN/LC_MESSAGES/Structural/FluentInterface/README.po new file mode 100644 index 0000000..0e58551 --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Structural/FluentInterface/README.po @@ -0,0 +1,66 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/FluentInterface/README.rst:2 +msgid "`Fluent Interface`__" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:7 +msgid "" +"To write code that is easy readable just like sentences in a natural " +"language (like English)." +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:11 +msgid "Examples" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:13 +msgid "Doctrine2's QueryBuilder works something like that example class below" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:15 +msgid "PHPUnit uses fluent interfaces to build mock objects" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:16 +msgid "Yii Framework: CDbCommand and CActiveRecord use this pattern, too" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:19 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:26 +msgid "Code" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:28 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:30 +msgid "Sql.php" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:37 +msgid "Test" +msgstr "" + +#: ../../Structural/FluentInterface/README.rst:39 +msgid "Tests/FluentInterfaceTest.php" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Structural/Proxy/README.po b/locale/zh_CN/LC_MESSAGES/Structural/Proxy/README.po new file mode 100644 index 0000000..290eacc --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Structural/Proxy/README.po @@ -0,0 +1,59 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Proxy/README.rst:2 +msgid "`Proxy`__" +msgstr "" + +#: ../../Structural/Proxy/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Proxy/README.rst:7 +msgid "To interface to anything that is expensive or impossible to duplicate." +msgstr "" + +#: ../../Structural/Proxy/README.rst:10 +msgid "Examples" +msgstr "" + +#: ../../Structural/Proxy/README.rst:12 +msgid "" +"Doctrine2 uses proxies to implement framework magic (e.g. lazy " +"initialization) in them, while the user still works with his own entity " +"classes and will never use nor touch the proxies" +msgstr "" + +#: ../../Structural/Proxy/README.rst:17 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Proxy/README.rst:24 +msgid "Code" +msgstr "" + +#: ../../Structural/Proxy/README.rst:26 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Proxy/README.rst:28 +msgid "Record.php" +msgstr "" + +#: ../../Structural/Proxy/README.rst:34 +msgid "RecordProxy.php" +msgstr "" + +#: ../../Structural/Proxy/README.rst:41 +msgid "Test" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Structural/README.po b/locale/zh_CN/LC_MESSAGES/Structural/README.po new file mode 100644 index 0000000..928301e --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Structural/README.po @@ -0,0 +1,23 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/README.rst:2 +msgid "Structural" +msgstr "" + +#: ../../Structural/README.rst:4 +msgid "" +"In Software Engineering, Structural Design Patterns are Design Patterns that" +" ease the design by identifying a simple way to realize relationships " +"between entities." +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Structural/Registry/README.po b/locale/zh_CN/LC_MESSAGES/Structural/Registry/README.po new file mode 100644 index 0000000..843138c --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/Structural/Registry/README.po @@ -0,0 +1,67 @@ +# +msgid "" +msgstr "" +"Project-Id-Version: DesignPatternsPHP 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-05-29 12:18+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../Structural/Registry/README.rst:2 +msgid "`Registry`__" +msgstr "" + +#: ../../Structural/Registry/README.rst:5 +msgid "Purpose" +msgstr "" + +#: ../../Structural/Registry/README.rst:7 +msgid "" +"To implement a central storage for objects often used throughout the " +"application, is typically implemented using an abstract class with only " +"static methods (or using the Singleton pattern)" +msgstr "" + +#: ../../Structural/Registry/README.rst:12 +msgid "Examples" +msgstr "" + +#: ../../Structural/Registry/README.rst:14 +msgid "" +"Zend Framework: ``Zend_Registry`` holds the application's logger object, " +"front controller etc." +msgstr "" + +#: ../../Structural/Registry/README.rst:16 +msgid "" +"Yii Framework: ``CWebApplication`` holds all the application components, " +"such as ``CWebUser``, ``CUrlManager``, etc." +msgstr "" + +#: ../../Structural/Registry/README.rst:20 +msgid "UML Diagram" +msgstr "" + +#: ../../Structural/Registry/README.rst:27 +msgid "Code" +msgstr "" + +#: ../../Structural/Registry/README.rst:29 +msgid "You can also find these code on `GitHub`_" +msgstr "" + +#: ../../Structural/Registry/README.rst:31 +msgid "Registry.php" +msgstr "" + +#: ../../Structural/Registry/README.rst:38 +msgid "Test" +msgstr "" + +#: ../../Structural/Registry/README.rst:40 +msgid "Tests/RegistryTest.php" +msgstr "" From 0ebafc5eaaac9ded775807321cec66ceea3f3b97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=93=D0=BB?= =?UTF-8?q?=D0=BE=D1=82=D0=BE=D0=B2?= Date: Sat, 30 May 2015 03:58:34 +0300 Subject: [PATCH 031/127] Memento pattern. - Caretaker should save history for normal pattern implementation. - Importent notes in code of Originator. - Readme with full pattern philosophy. - Tests and example of usage inside test. --- Behavioral/Memento/Caretaker.php | 29 +++-- Behavioral/Memento/Originator.php | 5 +- Behavioral/Memento/README.rst | 43 +++++--- Behavioral/Memento/Tests/MementoTest.php | 131 ++++++++++++++++++----- Behavioral/Memento/uml/uml.png | Bin 8364 -> 62525 bytes 5 files changed, 160 insertions(+), 48 deletions(-) diff --git a/Behavioral/Memento/Caretaker.php b/Behavioral/Memento/Caretaker.php index 340bb97..3a16fcd 100644 --- a/Behavioral/Memento/Caretaker.php +++ b/Behavioral/Memento/Caretaker.php @@ -4,12 +4,26 @@ namespace DesignPatterns\Behavioral\Memento; class Caretaker { - public static function run() + protected $history = array(); + + /** + * @return Memento + */ + public function getFromHistory($id) { - /* @var $savedStates Memento[] */ + return $this->history[$id]; + } - $savedStates = array(); + /** + * @param Memento $state + */ + public function saveToHistory(Memento $state) + { + $this->history[] = $state; + } + public function runCustomLogic() + { $originator = new Originator(); //Setting state to State1 @@ -17,17 +31,20 @@ class Caretaker //Setting state to State2 $originator->setState("State2"); //Saving State2 to Memento - $savedStates[] = $originator->saveToMemento(); + $this->saveToHistory($originator->getStateAsMemento()); //Setting state to State3 $originator->setState("State3"); // We can request multiple mementos, and choose which one to roll back to. // Saving State3 to Memento - $savedStates[] = $originator->saveToMemento(); + $this->saveToHistory($originator->getStateAsMemento()); //Setting state to State4 $originator->setState("State4"); - $originator->restoreFromMemento($savedStates[1]); + $originator->restoreFromMemento($this->getFromHistory(1)); //State after restoring from Memento: State3 + + return $originator->getStateAsMemento()->getState(); } + } diff --git a/Behavioral/Memento/Originator.php b/Behavioral/Memento/Originator.php index fec4e45..3acb0c1 100644 --- a/Behavioral/Memento/Originator.php +++ b/Behavioral/Memento/Originator.php @@ -15,14 +15,17 @@ class Originator */ public function setState($state) { + // you must check type of state inside child of this class + // or use type-hinting for full pattern implementation $this->state = $state; } /** * @return Memento */ - public function saveToMemento() + public function getStateAsMemento() { + // you must save a separate copy in Memento $state = is_object($this->state) ? clone $this->state : $this->state; return new Memento($state); diff --git a/Behavioral/Memento/README.rst b/Behavioral/Memento/README.rst index 6696149..2cbc555 100644 --- a/Behavioral/Memento/README.rst +++ b/Behavioral/Memento/README.rst @@ -4,26 +4,43 @@ Purpose ------- -Provide the ability to restore an object to its previous state (undo via -rollback). +It provides the ability to restore an object to its previous state (undo +via rollback) or to gain access to state of the object, without revealing +its implementation (ie, the object is not required to have a functional +for return the current state). -The memento pattern is implemented with three objects: the originator, a -caretaker and a memento. The originator is some object that has an -internal state. The caretaker is going to do something to the -originator, but wants to be able to undo the change. The caretaker first -asks the originator for a memento object. Then it does whatever -operation (or sequence of operations) it was going to do. To roll back -to the state before the operations, it returns the memento object to the -originator. The memento object itself is an opaque object (one which the -caretaker cannot, or should not, change). When using this pattern, care -should be taken if the originator may change other objects or resources -- the memento pattern operates on a single object. +The memento pattern is implemented with three objects: the Originator, a +Caretaker and a Memento. + +Memento – an object that *contains a concrete unique snapshot of state* of +any object or resource: string, number, array, an instance of class and so on. +The uniqueness in this case not imply the prohibition existence of similar +states in different snapshots. That means the state can be extracted as +the independent clone. Any object stored in the Memento should be +*a full copy of the original object rather than a reference* to the original +object. The Memento object is a "opaque object" (the object that no one can +or should change). + +Originator – it is an object that contains the *actual state of an external +object is strictly specified type*. Originator is able to create a unique +copy of this state and return it wrapped in a Memento. The Originator does +not know the history of changes. You can set a concrete state to Originator +from the outside, which will be considered as actual. The Originator must +make sure that given state corresponds the allowed type of object. Originator +may (but not should) have any methods, but they *they can't make changes to +the saved object state*. + +Caretaker *controls the states history*. He may make changes to an object; +take a decision to save the state of an external object in the Originator; +ask from the Originator snapshot of the current state; or set the Originator +state to equivalence with some snapshot from history. Examples -------- - The seed of a pseudorandom number generator - The state in a finite state machine +- Control for intermediate states of `ORM Model `_ before saving UML Diagram ----------- diff --git a/Behavioral/Memento/Tests/MementoTest.php b/Behavioral/Memento/Tests/MementoTest.php index 88110a6..ccc2097 100644 --- a/Behavioral/Memento/Tests/MementoTest.php +++ b/Behavioral/Memento/Tests/MementoTest.php @@ -2,6 +2,8 @@ namespace DesignPatterns\Behavioral\Memento\Tests; +use DesignPatterns\Behavioral\Memento\Caretaker; +use DesignPatterns\Behavioral\Memento\Memento; use DesignPatterns\Behavioral\Memento\Originator; /** @@ -10,6 +12,37 @@ use DesignPatterns\Behavioral\Memento\Originator; class MementoTest extends \PHPUnit_Framework_TestCase { + public function testUsageExample() + { + $originator = new Originator(); + $caretaker = new Caretaker(); + + $character = new \stdClass(); + $character->name = "Gandalf"; // new object + $originator->setState($character); // connect Originator to character object + + $character->name = "Gandalf the Grey"; // work on the object + $character->race = "Maia"; // still change something + $snapshot = $originator->getStateAsMemento(); // time to save state + $caretaker->saveToHistory($snapshot); // put state to log + + $character->name = "Sauron"; // change something + $character->race = "Ainur"; // and again + $this->assertAttributeEquals($character, "state", $originator); // state inside the Originator was equally changed + + $snapshot = $originator->getStateAsMemento(); // time to save another state + $caretaker->saveToHistory($snapshot); // put state to log + + $rollback = $caretaker->getFromHistory(0); + $originator->restoreFromMemento($rollback); // return to first state + $character = $rollback->getState(); // use character from old state + + $this->assertEquals("Gandalf the Grey", $character->name); // yes, that what we need + $character->name = "Gandalf the White"; // make new changes + + $this->assertAttributeEquals($character, "state", $originator); // and Originator linked to actual object again + } + public function testStringState() { $originator = new Originator(); @@ -18,52 +51,94 @@ class MementoTest extends \PHPUnit_Framework_TestCase $this->assertAttributeEquals("State1", "state", $originator); $originator->setState("State2"); - $this->assertAttributeEquals("State2", "state", $originator); - $savedState = $originator->saveToMemento(); - - $this->assertAttributeEquals("State2", "state", $savedState); + $snapshot = $originator->getStateAsMemento(); + $this->assertAttributeEquals("State2", "state", $snapshot); $originator->setState("State3"); - $this->assertAttributeEquals("State3", "state", $originator); - $originator->restoreFromMemento($savedState); - + $originator->restoreFromMemento($snapshot); $this->assertAttributeEquals("State2", "state", $originator); } - public function testObjectState() + public function testSnapshotIsClone() + { + $originator = new Originator(); + $object = new \stdClass(); + + $originator->setState($object); + $snapshot = $originator->getStateAsMemento(); + $object->new_property = 1; + + $this->assertAttributeEquals($object, "state", $originator); + $this->assertAttributeNotEquals($object, "state", $snapshot); + + $originator->restoreFromMemento($snapshot); + $this->assertAttributeNotEquals($object, "state", $originator); + } + + public function testCanChangeActualState() + { + $originator = new Originator(); + $first_state = new \stdClass(); + + $originator->setState($first_state); + $snapshot = $originator->getStateAsMemento(); + $second_state = $snapshot->getState(); + + $first_state->first_property = 1; // still actual + $second_state->second_property = 2; // just history + $this->assertAttributeEquals($first_state, "state", $originator); + $this->assertAttributeNotEquals($second_state, "state", $originator); + + $originator->restoreFromMemento($snapshot); + $first_state->first_property = 11; // now it lost state + $second_state->second_property = 22; // must be actual + $this->assertAttributeEquals($second_state, "state", $originator); + $this->assertAttributeNotEquals($first_state, "state", $originator); + } + + public function testStateWithDifferentObjects() { $originator = new Originator(); - $foo = new \stdClass(); - $foo->data = "foo"; + $first = new \stdClass(); + $first->data = "foo"; - $originator->setState($foo); + $originator->setState($first); + $this->assertAttributeEquals($first, "state", $originator); - $this->assertAttributeEquals($foo, "state", $originator); + $first_snapshot = $originator->getStateAsMemento(); + $this->assertAttributeEquals($first, "state", $first_snapshot); - $savedState = $originator->saveToMemento(); + $second = new \stdClass(); + $second->data = "bar"; + $originator->setState($second); + $this->assertAttributeEquals($second, "state", $originator); - $this->assertAttributeEquals($foo, "state", $savedState); + $originator->restoreFromMemento($first_snapshot); + $this->assertAttributeEquals($first, "state", $originator); + } - $bar = new \stdClass(); - $bar->data = "bar"; + public function testCaretaker() + { + $caretaker = new Caretaker(); + $memento1 = new Memento("foo"); + $memento2 = new Memento("bar"); + $caretaker->saveToHistory($memento1); + $caretaker->saveToHistory($memento2); + $this->assertAttributeEquals(array($memento1, $memento2), "history", $caretaker); + $this->assertEquals($memento1, $caretaker->getFromHistory(0)); + $this->assertEquals($memento2, $caretaker->getFromHistory(1)); - $originator->setState($bar); + } - $this->assertAttributeEquals($bar, "state", $originator); - - $originator->restoreFromMemento($savedState); - - $this->assertAttributeEquals($foo, "state", $originator); - - $foo->data = null; - - $this->assertAttributeNotEquals($foo, "state", $savedState); - - $this->assertAttributeNotEquals($foo, "state", $originator); + public function testCaretakerCustomLogic() + { + $caretaker = new Caretaker(); + $result = $caretaker->runCustomLogic(); + $this->assertEquals("State3", $result); } } diff --git a/Behavioral/Memento/uml/uml.png b/Behavioral/Memento/uml/uml.png index e96ea6951396c6d5101f156e6fccdb01365e0a89..0fde074e8a8f2f74c617bbc4a0e7323c2c346fb7 100644 GIT binary patch literal 62525 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

_fRntTQwG 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 Date: Fri, 29 May 2015 19:56:04 +0300 Subject: [PATCH 032/127] russian translation part one Root Readme Behavioral Command Chain Of Responsibilities Iterator Mediator More/readme.po Specification State Repository Service Locator Observer Strategy --- .../ChainOfResponsibilities/README.po | 45 ++++++---- .../LC_MESSAGES/Behavioral/Command/README.po | 51 +++++++---- .../LC_MESSAGES/Behavioral/Iterator/README.po | 44 ++++++---- .../LC_MESSAGES/Behavioral/Mediator/README.po | 47 ++++++---- .../LC_MESSAGES/Behavioral/Observer/README.po | 39 +++++---- locale/ru/LC_MESSAGES/Behavioral/README.po | 14 +-- .../Behavioral/Specification/README.po | 44 +++++----- .../ru/LC_MESSAGES/Behavioral/State/README.po | 34 ++++---- .../LC_MESSAGES/Behavioral/Strategy/README.po | 46 +++++----- locale/ru/LC_MESSAGES/More/README.po | 6 +- .../ru/LC_MESSAGES/More/Repository/README.po | 41 +++++---- .../LC_MESSAGES/More/ServiceLocator/README.po | 51 +++++++---- locale/ru/LC_MESSAGES/README.po | 86 +++++++++++++------ 13 files changed, 338 insertions(+), 210 deletions(-) diff --git a/locale/ru/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po b/locale/ru/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po index b5277a5..f9ece91 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po @@ -1,23 +1,23 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-29 21:17+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Behavioral/ChainOfResponsibilities/README.rst:2 msgid "`Chain Of Responsibilities`__" -msgstr "" +msgstr "`Цепочка обязанностей`__)" #: ../../Behavioral/ChainOfResponsibilities/README.rst:5 msgid "Purpose:" -msgstr "" +msgstr "Назначение:" #: ../../Behavioral/ChainOfResponsibilities/README.rst:7 msgid "" @@ -25,26 +25,34 @@ msgid "" "object cannot handle a call, it delegates the call to the next in the chain " "and so forth." msgstr "" +"Построить цепочку объектов для обработки вызова в последовательном порядке. " +"Если один объект не может справиться с вызовом, он делегирует вызов для " +"следующего в цепи и так далее." #: ../../Behavioral/ChainOfResponsibilities/README.rst:12 msgid "Examples:" -msgstr "" +msgstr "Примеры:" #: ../../Behavioral/ChainOfResponsibilities/README.rst:14 msgid "" "logging framework, where each chain element decides autonomously what to do " "with a log message" msgstr "" +"фреймворк для записи журналов, где каждый элемент цепи самостоятельно " +"принимает решение, что делать с сообщением для логгирования." #: ../../Behavioral/ChainOfResponsibilities/README.rst:16 msgid "a Spam filter" -msgstr "" +msgstr "фильтр спама" #: ../../Behavioral/ChainOfResponsibilities/README.rst:17 msgid "" "Caching: first object is an instance of e.g. a Memcached Interface, if that " "\"misses\" it delegates the call to the database interface" msgstr "" +"кеширование: первый объект является экземпляром, к примеру, интерфейса " +"Memcached. Если запись в кеше отсутствует, вызов делегируется интерфейсу " +"базы данных." #: ../../Behavioral/ChainOfResponsibilities/README.rst:19 msgid "" @@ -52,39 +60,42 @@ msgid "" "executing point is passed from one filter to the next along the chain, and " "only if all filters say \"yes\", the action can be invoked at last." msgstr "" +"Yii Framework: CFilterChain — это цепочка фильтров действий контроллера. " +"Точка вызова передаётся от фильтра к фильтру по цепочке и только если все " +"фильтры скажут “да”, действие в итоге может быть вызвано." #: ../../Behavioral/ChainOfResponsibilities/README.rst:25 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Behavioral/ChainOfResponsibilities/README.rst:32 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Behavioral/ChainOfResponsibilities/README.rst:34 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Behavioral/ChainOfResponsibilities/README.rst:36 msgid "Request.php" -msgstr "" +msgstr "Request.php" #: ../../Behavioral/ChainOfResponsibilities/README.rst:42 msgid "Handler.php" -msgstr "" +msgstr "Handler.php" #: ../../Behavioral/ChainOfResponsibilities/README.rst:48 msgid "Responsible/SlowStorage.php" -msgstr "" +msgstr "Responsible/SlowStorage.php" #: ../../Behavioral/ChainOfResponsibilities/README.rst:54 msgid "Responsible/FastStorage.php" -msgstr "" +msgstr "Responsible/FastStorage.php" #: ../../Behavioral/ChainOfResponsibilities/README.rst:61 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../Behavioral/ChainOfResponsibilities/README.rst:63 msgid "Tests/ChainTest.php" -msgstr "" +msgstr "Tests/ChainTest.php" diff --git a/locale/ru/LC_MESSAGES/Behavioral/Command/README.po b/locale/ru/LC_MESSAGES/Behavioral/Command/README.po index 29319a3..4654614 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/Command/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/Command/README.po @@ -1,27 +1,27 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-29 21:16+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Behavioral/Command/README.rst:2 msgid "`Command`__" -msgstr "" +msgstr "`Команда`__" #: ../../Behavioral/Command/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Behavioral/Command/README.rst:7 msgid "To encapsulate invocation and decoupling." -msgstr "" +msgstr "Инкапсулировать действие и его параметры" #: ../../Behavioral/Command/README.rst:9 msgid "" @@ -31,6 +31,12 @@ msgid "" "process the Command of the client. The Receiver is decoupled from the " "Invoker." msgstr "" +"Допустим, у нас есть объекты Invoker (Командир) и Receiver (Исполнитель). " +"Этот паттерн использует реализацию интерфейса «Команда», чтобы вызвать " +"некий метод Исполнителя используя для этого известный Командиру метод " +"«execute()». Командир просто знает, что нужно вызвать метод “execute()”, " +"для обработки команды клиента, не разбираясь в деталях реализации " +"Исполнителя. Исполнитель отделен от Командира." #: ../../Behavioral/Command/README.rst:15 msgid "" @@ -38,22 +44,30 @@ msgid "" "execute(). Command can also be aggregated to combine more complex commands " "with minimum copy-paste and relying on composition over inheritance." msgstr "" +"Вторым аспектом этого паттерна является метод undo(), который отменяет " +"действие, выполняемое методом execute(). Команды также могут быть " +"объединены в более общие команды с минимальным копированием-вставкой и " +"полагаясь на композицию поверх наследования." #: ../../Behavioral/Command/README.rst:21 msgid "Examples" -msgstr "" +msgstr "Примеры" #: ../../Behavioral/Command/README.rst:23 msgid "" "A text editor : all events are Command which can be undone, stacked and " "saved." msgstr "" +"текстовый редактор: все события являются Командами, которые могут быть " +"отменены, выстроены в определённую последовательность и сохранены." #: ../../Behavioral/Command/README.rst:25 msgid "" "Symfony2: SF2 Commands that can be run from the CLI are built with just the " "Command pattern in mind" msgstr "" +"Symfony2: SF2 Commands, это команды, которые построены согласно данному " +"паттерну и могут выполняться из командной строки." #: ../../Behavioral/Command/README.rst:27 msgid "" @@ -61,39 +75,42 @@ msgid "" "\"modules\", each of these can be implemented with the Command pattern (e.g." " vagrant)" msgstr "" +"большие утилиты для командной строки (например, Vagrant) используют " +"вложенные команды для разделения различных задач и упаковки их в «модули», " +"каждый из которых может быть реализован с помощью паттерна «Команда»." #: ../../Behavioral/Command/README.rst:32 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Behavioral/Command/README.rst:39 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Behavioral/Command/README.rst:41 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы также можете найти этот код на `GitHub`_" #: ../../Behavioral/Command/README.rst:43 msgid "CommandInterface.php" -msgstr "" +msgstr "CommandInterface.php" #: ../../Behavioral/Command/README.rst:49 msgid "HelloCommand.php" -msgstr "" +msgstr "HelloCommand.php" #: ../../Behavioral/Command/README.rst:55 msgid "Receiver.php" -msgstr "" +msgstr "Receiver.php" #: ../../Behavioral/Command/README.rst:61 msgid "Invoker.php" -msgstr "" +msgstr "Invoker.php" #: ../../Behavioral/Command/README.rst:68 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../Behavioral/Command/README.rst:70 msgid "Tests/CommandTest.php" -msgstr "" +msgstr "Tests/CommandTest.php" diff --git a/locale/ru/LC_MESSAGES/Behavioral/Iterator/README.po b/locale/ru/LC_MESSAGES/Behavioral/Iterator/README.po index 3000658..9f0543c 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/Iterator/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/Iterator/README.po @@ -1,43 +1,49 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-29 21:47+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Behavioral/Iterator/README.rst:2 msgid "`Iterator`__" -msgstr "" +msgstr "`Итератор`__" #: ../../Behavioral/Iterator/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Behavioral/Iterator/README.rst:7 msgid "" "To make an object iterable and to make it appear like a collection of " "objects." msgstr "" +"Добавить коллекции объектов функционал последовательного доступа к " +"содержащимся в ней экземплярам объектов без реализации этого функционала в " +"самой коллекции." #: ../../Behavioral/Iterator/README.rst:11 msgid "Examples" -msgstr "" +msgstr "Примеры" #: ../../Behavioral/Iterator/README.rst:13 msgid "" "to process a file line by line by just running over all lines (which have an" " object representation) for a file (which of course is an object, too)" msgstr "" +"построчный перебор файла, который представлен в виде объекта, содержащего " +"строки, тоже являющиеся объектами. Обработчик будет запущен поверх всех " +"объектов." #: ../../Behavioral/Iterator/README.rst:18 msgid "Note" -msgstr "" +msgstr "Примечание" #: ../../Behavioral/Iterator/README.rst:20 msgid "" @@ -45,39 +51,43 @@ msgid "" "suited for this! Often you would want to implement the Countable interface " "too, to allow ``count($object)`` on your iterable object" msgstr "" +"Стандартная библиотека PHP SPL определяет интерфейс Iterator, который " +"хорошо подходит для данных целей. Также вам может понадобиться реализовать " +"интерфейс Countable, чтобы разрешить вызывать ``count($object)`` в вашем " +"листаемом объекте." #: ../../Behavioral/Iterator/README.rst:25 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Behavioral/Iterator/README.rst:32 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Behavioral/Iterator/README.rst:34 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Также вы можете найти этот код на `GitHub`_" #: ../../Behavioral/Iterator/README.rst:36 msgid "Book.php" -msgstr "" +msgstr "Book.php" #: ../../Behavioral/Iterator/README.rst:42 msgid "BookList.php" -msgstr "" +msgstr "BookList.php" #: ../../Behavioral/Iterator/README.rst:48 msgid "BookListIterator.php" -msgstr "" +msgstr "BookListIterator.php" #: ../../Behavioral/Iterator/README.rst:54 msgid "BookListReverseIterator.php" -msgstr "" +msgstr "BookListReverseIterator.php" #: ../../Behavioral/Iterator/README.rst:61 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../Behavioral/Iterator/README.rst:63 msgid "Tests/IteratorTest.php" -msgstr "" +msgstr "Tests/IteratorTest.php" diff --git a/locale/ru/LC_MESSAGES/Behavioral/Mediator/README.po b/locale/ru/LC_MESSAGES/Behavioral/Mediator/README.po index 9c6694b..bfd28b8 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/Mediator/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/Mediator/README.po @@ -1,30 +1,36 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-29 22:18+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Language-Team: \n" +"X-Generator: Poedit 1.8.1\n" #: ../../Behavioral/Mediator/README.rst:2 msgid "`Mediator`__" -msgstr "" +msgstr "`Посредник`__" #: ../../Behavioral/Mediator/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Behavioral/Mediator/README.rst:7 msgid "" "This pattern provides an easy to decouple many components working together. " -"It is a good alternative over Observer IF you have a \"central " -"intelligence\", like a controller (but not in the sense of the MVC)." +"It is a good alternative over Observer IF you have a \"central intelligence" +"\", like a controller (but not in the sense of the MVC)." msgstr "" +"Этот паттерн позволяет снизить связность множества компонентов, работающих " +"совместно. Объектам больше нет нужды вызывать друг друга напрямую. Это " +"хорошая альтернатива Наблюдателю, если у вас есть “центр интеллекта” вроде " +"контроллера (но не в смысле MVC)" #: ../../Behavioral/Mediator/README.rst:11 msgid "" @@ -32,47 +38,50 @@ msgid "" "and it is a good thing because in OOP, one good friend is better than many. " "This is the key-feature of this pattern." msgstr "" +"Все компоненты (называемые «Коллеги») объединяются в интерфейс " +"MediatorInterface и это хорошо, потому что в рамках ООП, «старый друг лучше " +"новых двух»." #: ../../Behavioral/Mediator/README.rst:16 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Behavioral/Mediator/README.rst:23 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Behavioral/Mediator/README.rst:25 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Behavioral/Mediator/README.rst:27 msgid "MediatorInterface.php" -msgstr "" +msgstr "MediatorInterface.php" #: ../../Behavioral/Mediator/README.rst:33 msgid "Mediator.php" -msgstr "" +msgstr "Mediator.php" #: ../../Behavioral/Mediator/README.rst:39 msgid "Colleague.php" -msgstr "" +msgstr "Colleague.php" #: ../../Behavioral/Mediator/README.rst:45 msgid "Subsystem/Client.php" -msgstr "" +msgstr "Subsystem/Client.php" #: ../../Behavioral/Mediator/README.rst:51 msgid "Subsystem/Database.php" -msgstr "" +msgstr "Subsystem/Database.php" #: ../../Behavioral/Mediator/README.rst:57 msgid "Subsystem/Server.php" -msgstr "" +msgstr "Subsystem/Server.php" #: ../../Behavioral/Mediator/README.rst:64 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../Behavioral/Mediator/README.rst:66 msgid "Tests/MediatorTest.php" -msgstr "" +msgstr "Tests/MediatorTest.php" diff --git a/locale/ru/LC_MESSAGES/Behavioral/Observer/README.po b/locale/ru/LC_MESSAGES/Behavioral/Observer/README.po index 6aea8e9..9c2a830 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/Observer/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/Observer/README.po @@ -1,23 +1,23 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-30 05:20+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Behavioral/Observer/README.rst:2 msgid "`Observer`__" -msgstr "" +msgstr "`Наблюдатель`__" #: ../../Behavioral/Observer/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Behavioral/Observer/README.rst:7 msgid "" @@ -26,50 +26,59 @@ msgid "" "notified. It is used to shorten the amount of coupled objects and uses loose" " coupling instead." msgstr "" +"Для реализации публикации/подписки на поведение объекта, всякий раз, когда " +"объект «Subject» меняет свое состояние, прикрепленные объекты «Observers» " +"будут уведомлены. Паттерн используется, чтобы сократить количество " +"связанных напрямую объектов и вместо этого использует слабую связь (loose " +"coupling)." #: ../../Behavioral/Observer/README.rst:13 msgid "Examples" -msgstr "" +msgstr "Примеры" #: ../../Behavioral/Observer/README.rst:15 msgid "" "a message queue system is observed to show the progress of a job in a GUI" msgstr "" +"Система очереди сообщений наблюдает за очередями, чтобы отображать прогресс " +"в GUI" #: ../../Behavioral/Observer/README.rst:19 msgid "Note" -msgstr "" +msgstr "Примечание" #: ../../Behavioral/Observer/README.rst:21 msgid "" "PHP already defines two interfaces that can help to implement this pattern: " "SplObserver and SplSubject." msgstr "" +"PHP предоставляет два стандартных интерфейса, которые могут помочь " +"реализовать этот шаблон: SplObserver и SplSubject." #: ../../Behavioral/Observer/README.rst:25 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Behavioral/Observer/README.rst:32 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Behavioral/Observer/README.rst:34 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Behavioral/Observer/README.rst:36 msgid "User.php" -msgstr "" +msgstr "User.php" #: ../../Behavioral/Observer/README.rst:42 msgid "UserObserver.php" -msgstr "" +msgstr "UserObserver.php" #: ../../Behavioral/Observer/README.rst:49 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../Behavioral/Observer/README.rst:51 msgid "Tests/ObserverTest.php" -msgstr "" +msgstr "Tests/ObserverTest.php" diff --git a/locale/ru/LC_MESSAGES/Behavioral/README.po b/locale/ru/LC_MESSAGES/Behavioral/README.po index bd66758..8564706 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/README.po @@ -1,19 +1,19 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-29 21:22+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Behavioral/README.rst:2 msgid "Behavioral" -msgstr "" +msgstr "Поведенческие шаблоны проектирования" #: ../../Behavioral/README.rst:4 msgid "" @@ -22,3 +22,7 @@ msgid "" "patterns. By doing so, these patterns increase flexibility in carrying out " "this communication." msgstr "" +"Поведенческие шаблоны проектирования определяют общие закономерности связей " +"между объектами, реализующими данные паттерны. Следование этим шаблонам " +"уменьшает связность системы и облегчает коммуникацию между объектами, что " +"улучшает гибкость программного продукта." diff --git a/locale/ru/LC_MESSAGES/Behavioral/Specification/README.po b/locale/ru/LC_MESSAGES/Behavioral/Specification/README.po index 54e3b64..b35674b 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/Specification/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/Specification/README.po @@ -1,23 +1,23 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-30 04:28+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Behavioral/Specification/README.rst:2 msgid "`Specification`__" -msgstr "" +msgstr "`Спецификация`__" #: ../../Behavioral/Specification/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Behavioral/Specification/README.rst:7 msgid "" @@ -26,59 +26,63 @@ msgid "" "``isSatisfiedBy`` that returns either true or false depending on whether the" " given object satisfies the specification." msgstr "" +"Строит ясное описание бизнес-правил, на соответствие которым могут быть " +"проверены объекты. Композитный класс спецификация имеет один метод, " +"называемый ``isSatisfiedBy``, который возвращает истину или ложь в " +"зависимости от того, удовлетворяет ли данный объект спецификации." #: ../../Behavioral/Specification/README.rst:13 msgid "Examples" -msgstr "" +msgstr "Примеры" #: ../../Behavioral/Specification/README.rst:15 msgid "`RulerZ `__" -msgstr "" +msgstr "`RulerZ `__" #: ../../Behavioral/Specification/README.rst:18 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Behavioral/Specification/README.rst:25 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Behavioral/Specification/README.rst:27 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Behavioral/Specification/README.rst:29 msgid "Item.php" -msgstr "" +msgstr "Item.php" #: ../../Behavioral/Specification/README.rst:35 msgid "SpecificationInterface.php" -msgstr "" +msgstr "SpecificationInterface.php" #: ../../Behavioral/Specification/README.rst:41 msgid "AbstractSpecification.php" -msgstr "" +msgstr "AbstractSpecification.php" #: ../../Behavioral/Specification/README.rst:47 msgid "Either.php" -msgstr "" +msgstr "Either.php" #: ../../Behavioral/Specification/README.rst:53 msgid "PriceSpecification.php" -msgstr "" +msgstr "PriceSpecification.php" #: ../../Behavioral/Specification/README.rst:59 msgid "Plus.php" -msgstr "" +msgstr "Plus.php" #: ../../Behavioral/Specification/README.rst:65 msgid "Not.php" -msgstr "" +msgstr "Not.php" #: ../../Behavioral/Specification/README.rst:72 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../Behavioral/Specification/README.rst:74 msgid "Tests/SpecificationTest.php" -msgstr "" +msgstr "Tests/SpecificationTest.php" diff --git a/locale/ru/LC_MESSAGES/Behavioral/State/README.po b/locale/ru/LC_MESSAGES/Behavioral/State/README.po index f71fbfa..a6eded9 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/State/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/State/README.po @@ -1,23 +1,23 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-30 04:40+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Behavioral/State/README.rst:2 msgid "`State`__" -msgstr "" +msgstr "`Состояние`__" #: ../../Behavioral/State/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Behavioral/State/README.rst:7 msgid "" @@ -25,39 +25,43 @@ msgid "" "state. This can be a cleaner way for an object to change its behavior at " "runtime without resorting to large monolithic conditional statements." msgstr "" +"Инкапсулирует изменение поведения одних и тех же методов в зависимости " +"от состояния объекта.\n" +"Этот паттерн поможет изящным способом изменить поведение объекта во " +"время выполнения не прибегая к большим монолитным условным операторам." #: ../../Behavioral/State/README.rst:12 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Behavioral/State/README.rst:19 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Behavioral/State/README.rst:21 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Behavioral/State/README.rst:23 msgid "OrderController.php" -msgstr "" +msgstr "OrderController.php" #: ../../Behavioral/State/README.rst:29 msgid "OrderFactory.php" -msgstr "" +msgstr "OrderFactory.php" #: ../../Behavioral/State/README.rst:35 msgid "OrderInterface.php" -msgstr "" +msgstr "OrderInterface.php" #: ../../Behavioral/State/README.rst:41 msgid "ShippingOrder.php" -msgstr "" +msgstr "ShippingOrder.php" #: ../../Behavioral/State/README.rst:47 msgid "CreateOrder.php" -msgstr "" +msgstr "CreateOrder.php" #: ../../Behavioral/State/README.rst:54 msgid "Test" -msgstr "" +msgstr "Тест" diff --git a/locale/ru/LC_MESSAGES/Behavioral/Strategy/README.po b/locale/ru/LC_MESSAGES/Behavioral/Strategy/README.po index dd5797e..166b20c 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/Strategy/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/Strategy/README.po @@ -1,39 +1,39 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-30 05:25+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Behavioral/Strategy/README.rst:2 msgid "`Strategy`__" -msgstr "" +msgstr "`Стратегия`__" #: ../../Behavioral/Strategy/README.rst:5 msgid "Terminology:" -msgstr "" +msgstr "Терминология:" #: ../../Behavioral/Strategy/README.rst:7 msgid "Context" -msgstr "" +msgstr "Context" #: ../../Behavioral/Strategy/README.rst:8 msgid "Strategy" -msgstr "" +msgstr "Strategy" #: ../../Behavioral/Strategy/README.rst:9 msgid "Concrete Strategy" -msgstr "" +msgstr "Concrete Strategy" #: ../../Behavioral/Strategy/README.rst:12 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Behavioral/Strategy/README.rst:14 msgid "" @@ -41,52 +41,58 @@ msgid "" "pattern is a good alternative to inheritance (instead of having an abstract " "class that is extended)." msgstr "" +"Чтобы разделить стратегии и получить возможность быстрого переключения " +"между ними. Также этот паттерн является хорошей альтернативой наследованию " +"(вместо расширения абстрактного класса)." #: ../../Behavioral/Strategy/README.rst:19 msgid "Examples" -msgstr "" +msgstr "Примеры" #: ../../Behavioral/Strategy/README.rst:21 msgid "sorting a list of objects, one strategy by date, the other by id" msgstr "" +"сортировка списка объектов, одна стратегия сортирует по дате, другая по id" #: ../../Behavioral/Strategy/README.rst:22 msgid "" "simplify unit testing: e.g. switching between file and in-memory storage" msgstr "" +"упростить юнит тестирование: например переключение между файловым " +"хранилищем и хранилищем в оперативной памяти" #: ../../Behavioral/Strategy/README.rst:26 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Behavioral/Strategy/README.rst:33 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Behavioral/Strategy/README.rst:35 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Behavioral/Strategy/README.rst:37 msgid "ObjectCollection.php" -msgstr "" +msgstr "ObjectCollection.php" #: ../../Behavioral/Strategy/README.rst:43 msgid "ComparatorInterface.php" -msgstr "" +msgstr "ComparatorInterface.php" #: ../../Behavioral/Strategy/README.rst:49 msgid "DateComparator.php" -msgstr "" +msgstr "DateComparator.php" #: ../../Behavioral/Strategy/README.rst:55 msgid "IdComparator.php" -msgstr "" +msgstr "IdComparator.php" #: ../../Behavioral/Strategy/README.rst:62 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../Behavioral/Strategy/README.rst:64 msgid "Tests/StrategyTest.php" -msgstr "" +msgstr "Tests/StrategyTest.php" diff --git a/locale/ru/LC_MESSAGES/More/README.po b/locale/ru/LC_MESSAGES/More/README.po index c3585d8..20ae34a 100644 --- a/locale/ru/LC_MESSAGES/More/README.po +++ b/locale/ru/LC_MESSAGES/More/README.po @@ -5,12 +5,12 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../More/README.rst:2 msgid "More" -msgstr "" +msgstr "Дополнительно" diff --git a/locale/ru/LC_MESSAGES/More/Repository/README.po b/locale/ru/LC_MESSAGES/More/Repository/README.po index d9ecc90..e76b302 100644 --- a/locale/ru/LC_MESSAGES/More/Repository/README.po +++ b/locale/ru/LC_MESSAGES/More/Repository/README.po @@ -1,23 +1,23 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-30 05:02+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../More/Repository/README.rst:2 msgid "Repository" -msgstr "" +msgstr "Repository" #: ../../More/Repository/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../More/Repository/README.rst:7 msgid "" @@ -28,49 +28,58 @@ msgid "" "also supports the objective of achieving a clean separation and one-way " "dependency between the domain and data mapping layers." msgstr "" +"Посредник между уровнями области определения (хранилище) и распределения " +"данных. Использует интерфейс, похожий на коллекции, для доступа к объектам " +"области определения. Репозиторий инкапсулирует набор объектов, сохраняемых " +"в хранилище данных, и операции выполняемые над ними, обеспечивая более " +"объектно-ориентированное представление реальных данных. Репозиторий также " +"преследует цель достижения полного разделения и односторонней зависимости " +"между уровнями области определения и распределения данных." #: ../../More/Repository/README.rst:16 msgid "Examples" -msgstr "" +msgstr "Примеры" #: ../../More/Repository/README.rst:18 msgid "" "Doctrine 2 ORM: there is Repository that mediates between Entity and DBAL " "and contains methods to retrieve objects" msgstr "" +"Doctrine 2 ORM: в ней есть Repository, который является связующим звеном " +"между Entity и DBAL и содержит методы для получения объектов." #: ../../More/Repository/README.rst:20 msgid "Laravel Framework" -msgstr "" +msgstr "Laravel Framework" #: ../../More/Repository/README.rst:23 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../More/Repository/README.rst:30 msgid "Code" -msgstr "" +msgstr "Код" #: ../../More/Repository/README.rst:32 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../More/Repository/README.rst:34 msgid "Post.php" -msgstr "" +msgstr "Post.php" #: ../../More/Repository/README.rst:40 msgid "PostRepository.php" -msgstr "" +msgstr "PostRepository.php" #: ../../More/Repository/README.rst:46 msgid "Storage.php" -msgstr "" +msgstr "Storage.php" #: ../../More/Repository/README.rst:52 msgid "MemoryStorage.php" -msgstr "" +msgstr "MemoryStorage.php" #: ../../More/Repository/README.rst:59 msgid "Test" -msgstr "" +msgstr "Тест" diff --git a/locale/ru/LC_MESSAGES/More/ServiceLocator/README.po b/locale/ru/LC_MESSAGES/More/ServiceLocator/README.po index 9808a92..2d89e95 100644 --- a/locale/ru/LC_MESSAGES/More/ServiceLocator/README.po +++ b/locale/ru/LC_MESSAGES/More/ServiceLocator/README.po @@ -1,23 +1,23 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-30 05:14+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../More/ServiceLocator/README.rst:2 msgid "`Service Locator`__" -msgstr "" +msgstr "`Локатор Служб`__" #: ../../More/ServiceLocator/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../More/ServiceLocator/README.rst:7 msgid "" @@ -25,10 +25,14 @@ msgid "" " maintainable and extendable code. DI pattern and Service Locator pattern " "are an implementation of the Inverse of Control pattern." msgstr "" +"Для реализации слабосвязанной архитектуры, чтобы получить хорошо " +"тестируемый, сопровождаемый и расширяемый код. Паттерн Инъекция " +"зависимостей (DI) и паттерн Локатор Служб — это реализация паттерна " +"Инверсия управления (Inversion of Control, IoC)." #: ../../More/ServiceLocator/README.rst:12 msgid "Usage" -msgstr "" +msgstr "Использование" #: ../../More/ServiceLocator/README.rst:14 msgid "" @@ -37,10 +41,15 @@ msgid "" "of the application without knowing its implementation. You can configure and" " inject the Service Locator object on bootstrap." msgstr "" +"С ``Локатором Служб`` вы можете зарегистрировать сервис для определенного " +"интерфейса. С помощью интерфейса вы можете получить зарегистрированный " +"сервис и использовать его в классах приложения, не зная его реализацию. Вы " +"можете настроить и внедрить объект Service Locator на начальном этапе " +"сборки приложения." #: ../../More/ServiceLocator/README.rst:20 msgid "Examples" -msgstr "" +msgstr "Примеры" #: ../../More/ServiceLocator/README.rst:22 msgid "" @@ -48,47 +57,51 @@ msgid "" "the framework(i.e. EventManager, ModuleManager, all custom user services " "provided by modules, etc...)" msgstr "" +"Zend Framework 2 использует Service Locator для создания и совместного " +"использования сервисов, задействованных в фреймворке (т.е. EventManager, " +"ModuleManager, все пользовательские сервисы, предоставляемые модулями, и т." +"д ...)" #: ../../More/ServiceLocator/README.rst:27 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../More/ServiceLocator/README.rst:34 msgid "Code" -msgstr "" +msgstr "Код" #: ../../More/ServiceLocator/README.rst:36 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../More/ServiceLocator/README.rst:38 msgid "ServiceLocatorInterface.php" -msgstr "" +msgstr "ServiceLocatorInterface.php" #: ../../More/ServiceLocator/README.rst:44 msgid "ServiceLocator.php" -msgstr "" +msgstr "ServiceLocator.php" #: ../../More/ServiceLocator/README.rst:50 msgid "LogServiceInterface.php" -msgstr "" +msgstr "LogServiceInterface.php" #: ../../More/ServiceLocator/README.rst:56 msgid "LogService.php" -msgstr "" +msgstr "LogService.php" #: ../../More/ServiceLocator/README.rst:62 msgid "DatabaseServiceInterface.php" -msgstr "" +msgstr "DatabaseServiceInterface.php" #: ../../More/ServiceLocator/README.rst:68 msgid "DatabaseService.php" -msgstr "" +msgstr "DatabaseService.php" #: ../../More/ServiceLocator/README.rst:75 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../More/ServiceLocator/README.rst:77 msgid "Tests/ServiceLocatorTest.php" -msgstr "" +msgstr "Tests/ServiceLocatorTest.php" diff --git a/locale/ru/LC_MESSAGES/README.po b/locale/ru/LC_MESSAGES/README.po index 3a26db2..5efb48e 100644 --- a/locale/ru/LC_MESSAGES/README.po +++ b/locale/ru/LC_MESSAGES/README.po @@ -1,85 +1,109 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-29 19:46+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../README.rst:5 msgid "DesignPatternsPHP" -msgstr "" +msgstr "DesignPatternsPHP" #: ../../README.rst:11 msgid "" -"This is a collection of known `design patterns`_ and some sample code how to" -" implement them in PHP. Every pattern has a small list of examples (most of " -"them from Zend Framework, Symfony2 or Doctrine2 as I'm most familiar with " -"this software)." +"This is a collection of known `design patterns`_ and some sample code how " +"to implement them in PHP. Every pattern has a small list of examples (most " +"of them from Zend Framework, Symfony2 or Doctrine2 as I'm most familiar " +"with this software)." msgstr "" +"Это набор известных `шаблонов проектирования `_ (паттернов) и некоторые " +"примеры их реализации в PHP. Каждый паттерн содержит небольшой перечень " +"примеров (большинство из них для ZendFramework, Symfony2 или Doctrine2, так " +"как я лучше всего знаком с этим программным обеспечением)." #: ../../README.rst:16 msgid "" "I think the problem with patterns is that often people do know them but " "don't know when to apply which." msgstr "" +"Я считаю, проблема паттернов в том, что люди часто знакомы с ними, но не " +"представляют как их применять." #: ../../README.rst:20 msgid "Patterns" -msgstr "" +msgstr "Паттерны" #: ../../README.rst:22 msgid "" -"The patterns can be structured in roughly three different categories. Please" -" click on **the title of every pattern's page** for a full explanation of " -"the pattern on Wikipedia." +"The patterns can be structured in roughly three different categories. " +"Please click on **the title of every pattern's page** for a full " +"explanation of the pattern on Wikipedia." msgstr "" +"Паттерны могут быть условно сгруппированы в три различные категории. " +"Нажмите на **заголовок каждой страницы с паттерном** для детального " +"объяснения паттерна в Википедии." #: ../../README.rst:35 msgid "Contribute" -msgstr "" +msgstr "Участие в разработке" #: ../../README.rst:37 msgid "" "Please feel free to fork and extend existing or add your own examples and " "send a pull request with your changes! To establish a consistent code " "quality, please check your code using `PHP CodeSniffer`_ against `PSR2 " -"standard`_ using ``./vendor/bin/phpcs -p --standard=PSR2 --ignore=vendor " -".``." +"standard`_ using ``./vendor/bin/phpcs -p --standard=PSR2 --ignore=vendor ." +"``." msgstr "" +"Мы приветствуем ответвления этого репозитория. Добавляйте свои примеры и " +"отправляйте запросы на изменение (pull requests)! Чтобы сохранять высокое " +"качество кода, пожалуйста, проверяйте ваш код на соответствие стандарту " +"`PSR2`. Для этого вы можете воспользоваться `PHP CodeSniffer`_ командой ``./" +"vendor/bin/phpcs -p --standard=PSR2 --ignore=vendor .``." #: ../../README.rst:44 msgid "License" -msgstr "" +msgstr "Лицензия" #: ../../README.rst:46 msgid "(The MIT License)" -msgstr "" +msgstr "(The MIT License)" #: ../../README.rst:48 msgid "Copyright (c) 2014 `Dominik Liebler`_ and `contributors`_" -msgstr "" +msgstr "Copyright (c) 2014 `Dominik Liebler`_ and `contributors`_" #: ../../README.rst:50 msgid "" -"Permission is hereby granted, free of charge, to any person obtaining a copy" -" of this software and associated documentation files (the 'Software'), to " -"deal in the Software without restriction, including without limitation the " -"rights to use, copy, modify, merge, publish, distribute, sublicense, and/or " -"sell copies of the Software, and to permit persons to whom the Software is " -"furnished to do so, subject to the following conditions:" +"Permission is hereby granted, free of charge, to any person obtaining a " +"copy of this software and associated documentation files (the 'Software'), " +"to deal in the Software without restriction, including without limitation " +"the rights to use, copy, modify, merge, publish, distribute, sublicense, " +"and/or sell copies of the Software, and to permit persons to whom the " +"Software is furnished to do so, subject to the following conditions:" msgstr "" +"Данная лицензия разрешает лицам, получившим копию данного программного " +"обеспечения и сопутствующую документациию (в дальнейшем именуемыми " +"«Программное Обеспечение»), безвозмездно использовать Программное " +"Обеспечение без ограничений, включая неограниченное право на использование, " +"копирование, изменение, добавление, публикацию, распространение, " +"сублицензирование и/или продажу копий Программного Обеспечения, а также " +"лицам, которым предоставляется данное Программное Обеспечение, при " +"соблюдении следующих условий:" #: ../../README.rst:58 msgid "" "The above copyright notice and this permission notice shall be included in " "all copies or substantial portions of the Software." msgstr "" +"Указанное выше уведомление об авторском праве и данные условия должны быть " +"включены во все копии или значимые части данного Программного Обеспечения." #: ../../README.rst:61 msgid "" @@ -88,6 +112,14 @@ msgid "" "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE " "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER " "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING " -"FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS" -" IN THE SOFTWARE." +"FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER " +"DEALINGS IN THE SOFTWARE." msgstr "" +"ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО " +"ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ ГАРАНТИИ ТОВАРНОЙ " +"ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ " +"НАРУШЕНИЙ, НО НЕ ОГРАНИЧИВАЯСЬ ИМИ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ " +"ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО КАКИМ-ЛИБО ИСКАМ, ЗА УЩЕРБ ИЛИ " +"ПО ИНЫМ ТРЕБОВАНИЯМ, В ТОМ ЧИСЛЕ, ПРИ ДЕЙСТВИИ КОНТРАКТА, ДЕЛИКТЕ ИЛИ ИНОЙ " +"СИТУАЦИИ, ВОЗНИКШИМ ИЗ-ЗА ИСПОЛЬЗОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫХ " +"ДЕЙСТВИЙ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ." From eb2fee04076259455de18ad19be38837121f7ac0 Mon Sep 17 00:00:00 2001 From: suxiaolin Date: Sat, 30 May 2015 08:54:39 +0800 Subject: [PATCH 033/127] Chinese translation part one first translation for `zh_CN` fix quote typo finish locale/zh_CN/LC_MESSAGES/Creational/README.po translate to `zh_CN` finish locale/zh_CN/LC_MESSAGES/Creational/Singleton/README.po translate to `zh_CN` finish /Volumes/Macintosh locale/zh_CN/LC_MESSAGES/Creational/StaticFactory/README.po translate to `zh_CN` replace chinses quote to english quote fix format and typo issues, remove need not transition lines. optimized wording, retranslation the MIT LICENSE fix double single quote issue --- locale/zh_CN/LC_MESSAGES/Creational/README.po | 6 ++++- .../Creational/Singleton/README.po | 23 ++++++++++--------- .../Creational/StaticFactory/README.po | 18 +++++++++------ locale/zh_CN/LC_MESSAGES/README.po | 18 +++++++++++---- 4 files changed, 42 insertions(+), 23 deletions(-) diff --git a/locale/zh_CN/LC_MESSAGES/Creational/README.po b/locale/zh_CN/LC_MESSAGES/Creational/README.po index d947d57..951ebf7 100644 --- a/locale/zh_CN/LC_MESSAGES/Creational/README.po +++ b/locale/zh_CN/LC_MESSAGES/Creational/README.po @@ -13,7 +13,7 @@ msgstr "" #: ../../Creational/README.rst:2 msgid "Creational" -msgstr "" +msgstr "创建型设计模式" #: ../../Creational/README.rst:4 msgid "" @@ -23,3 +23,7 @@ msgid "" " design problems or added complexity to the design. Creational design " "patterns solve this problem by somehow controlling this object creation." msgstr "" +"在软件工程中,创建型设计模式承担着对象创建的职责,尝试创建" +"适合程序上下文的对象,对象创建设计模式的产生是由于软件工程" +"设计的问题,具体说是向设计中增加复杂度,创建型设计模式解决" +"了程序设计中对象创建的问题。" diff --git a/locale/zh_CN/LC_MESSAGES/Creational/Singleton/README.po b/locale/zh_CN/LC_MESSAGES/Creational/Singleton/README.po index 5d108ca..9b3401f 100644 --- a/locale/zh_CN/LC_MESSAGES/Creational/Singleton/README.po +++ b/locale/zh_CN/LC_MESSAGES/Creational/Singleton/README.po @@ -13,54 +13,55 @@ msgstr "" #: ../../Creational/Singleton/README.rst:2 msgid "`Singleton`__" -msgstr "" +msgstr "`单例模式`__" #: ../../Creational/Singleton/README.rst:4 msgid "" "**THIS IS CONSIDERED TO BE AN ANTI-PATTERN! FOR BETTER TESTABILITY AND " "MAINTAINABILITY USE DEPENDENCY INJECTION!**" -msgstr "" +msgstr "**单例模式已经被考虑列入到反模式中!请使用依赖注入获得更好的代码可测试性和可控性!**" #: ../../Creational/Singleton/README.rst:8 msgid "Purpose" -msgstr "" +msgstr "目标" #: ../../Creational/Singleton/README.rst:10 msgid "" "To have only one instance of this object in the application that will handle" " all calls." -msgstr "" +msgstr "使应用中只存在一个对象的实例,并且使这个单实例负责所有对该对象的调用。" #: ../../Creational/Singleton/README.rst:14 msgid "Examples" -msgstr "" +msgstr "例子" #: ../../Creational/Singleton/README.rst:16 msgid "DB Connector" -msgstr "" +msgstr "数据库连接器" #: ../../Creational/Singleton/README.rst:17 msgid "" "Logger (may also be a Multiton if there are many log files for several " "purposes)" -msgstr "" +msgstr "日志记录器 (可能有多个实例,比如有多个日志文件因为不同的目的记录不同到的日志)" #: ../../Creational/Singleton/README.rst:19 msgid "" "Lock file for the application (there is only one in the filesystem ...)" msgstr "" +"应用锁文件 (理论上整个应用只有一个锁文件 ...)" #: ../../Creational/Singleton/README.rst:23 msgid "UML Diagram" -msgstr "" +msgstr "UML 图" #: ../../Creational/Singleton/README.rst:30 msgid "Code" -msgstr "" +msgstr "代码" #: ../../Creational/Singleton/README.rst:32 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "你可以在 `GitHub`_ 上找到这些代码" #: ../../Creational/Singleton/README.rst:34 msgid "Singleton.php" @@ -68,7 +69,7 @@ msgstr "" #: ../../Creational/Singleton/README.rst:41 msgid "Test" -msgstr "" +msgstr "测试" #: ../../Creational/Singleton/README.rst:43 msgid "Tests/SingletonTest.php" diff --git a/locale/zh_CN/LC_MESSAGES/Creational/StaticFactory/README.po b/locale/zh_CN/LC_MESSAGES/Creational/StaticFactory/README.po index 4a6f64e..2b694a2 100644 --- a/locale/zh_CN/LC_MESSAGES/Creational/StaticFactory/README.po +++ b/locale/zh_CN/LC_MESSAGES/Creational/StaticFactory/README.po @@ -13,11 +13,11 @@ msgstr "" #: ../../Creational/StaticFactory/README.rst:2 msgid "Static Factory" -msgstr "" +msgstr "静态工厂" #: ../../Creational/StaticFactory/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "目的" #: ../../Creational/StaticFactory/README.rst:7 msgid "" @@ -27,28 +27,32 @@ msgid "" "method to create all types of objects it can create. It is usually named " "``factory`` or ``build``." msgstr "" +"和抽象工厂类似,静态工厂模式用来创建一系列互相关联或依赖的对象,和抽象工厂模式不同的是静态工厂" +"模式只用一个静态方法就解决了所有类型的对象创建,通常被命名为``工厂`` 或者 ``构建器``" #: ../../Creational/StaticFactory/README.rst:14 msgid "Examples" -msgstr "" +msgstr "例子" #: ../../Creational/StaticFactory/README.rst:16 msgid "" "Zend Framework: ``Zend_Cache_Backend`` or ``_Frontend`` use a factory method" " create cache backends or frontends" msgstr "" +"Zend Framework 框架中的: ``Zend_Cache_Backend`` 和 ``_Frontend`` 使用了静态工厂设计模式" +" 创建后端缓存或者前端缓存对象" #: ../../Creational/StaticFactory/README.rst:20 msgid "UML Diagram" -msgstr "" +msgstr "UML 图" #: ../../Creational/StaticFactory/README.rst:27 msgid "Code" -msgstr "" +msgstr "代码" #: ../../Creational/StaticFactory/README.rst:29 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "你可以在 `GitHub`_ 上找到这些代码" #: ../../Creational/StaticFactory/README.rst:31 msgid "StaticFactory.php" @@ -68,7 +72,7 @@ msgstr "" #: ../../Creational/StaticFactory/README.rst:56 msgid "Test" -msgstr "" +msgstr "测试" #: ../../Creational/StaticFactory/README.rst:58 msgid "Tests/StaticFactoryTest.php" diff --git a/locale/zh_CN/LC_MESSAGES/README.po b/locale/zh_CN/LC_MESSAGES/README.po index c647e56..468f5ca 100644 --- a/locale/zh_CN/LC_MESSAGES/README.po +++ b/locale/zh_CN/LC_MESSAGES/README.po @@ -32,7 +32,8 @@ msgstr "" msgid "" "I think the problem with patterns is that often people do know them but " "don't know when to apply which." -msgstr "翻译。。。" +msgstr “” +"我认为人们对于设计模式抱有的问题在于大家都了解它们却不知道该如何在实际中使用它们。" #: ../../README.rst:20 msgid "Patterns" @@ -57,7 +58,9 @@ msgid "" "send a pull request with your changes! To establish a consistent code " "quality, please check your code using `PHP CodeSniffer`_ against `PSR2 " "standard`_ using ``./vendor/bin/phpcs -p --standard=PSR2 --ignore=vendor .``." -msgstr "翻译。。。" +msgstr "" +"欢迎你fork代码修改和提pr,为了保证代码的质量," +"请使用 `PHP CodeSniffer`_ 检查你的代码是否遵守 `PSR2 编码规范`_,使用 ``./vendor/bin/phpcs -p --standard=PSR2 --ignore=vendor .``. 命令检查。" #: ../../README.rst:44 msgid "License" @@ -65,11 +68,11 @@ msgstr "协议" #: ../../README.rst:46 msgid "(The MIT License)" -msgstr "" +msgstr "MIT 授权协议" #: ../../README.rst:48 msgid "Copyright (c) 2014 `Dominik Liebler`_ and `contributors`_" -msgstr "" +msgstr "Copyright (c) 2014 `Dominik Liebler`_ 和 `贡献者`_" #: ../../README.rst:50 msgid "" @@ -80,12 +83,16 @@ msgid "" "sell copies of the Software, and to permit persons to whom the Software is " "furnished to do so, subject to the following conditions:" msgstr "" +"在此授权给任何遵守本软件授权协议的人免费使用的权利,可以" +"不受限制的的使用,包括不受限制的使用,复制,修改,合并,重新发布,分发,改变授权许可,甚至售卖本软件的拷贝," +"同时也允许买这个软件的个人也具备上述权利,大意如下:" #: ../../README.rst:58 msgid "" "The above copyright notice and this permission notice shall be included in " "all copies or substantial portions of the Software." msgstr "" +"上面的权利和授权注意事项应该被包括在本软件的所有的派生分支/版本中" #: ../../README.rst:61 msgid "" @@ -97,3 +104,6 @@ msgid "" "FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS " "IN THE SOFTWARE." msgstr "" +"该软件是'按原样'提供的,没有任何形式的明示或暗示,包括但不限于为特定目的和不侵权的适销性和适用性的保证担保。" +"在任何情况下,作者或版权持有人,都无权要求任何索赔,或有关损害赔偿的其他责任。" +"无论在本软件的使用上或其他买卖交易中,是否涉及合同,侵权或其他行为。" From 9c3f4f4f3b37f774c36a70fb69bf4b481e1f3bae Mon Sep 17 00:00:00 2001 From: Faust Date: Sun, 31 May 2015 13:25:04 +0200 Subject: [PATCH 034/127] add wikipedia links on cataloge of pattern --- Behavioral/README.rst | 6 ++++-- Creational/README.rst | 6 ++++-- Structural/README.rst | 6 ++++-- locale/ca/LC_MESSAGES/Behavioral/README.po | 2 +- locale/ca/LC_MESSAGES/Creational/README.po | 2 +- locale/ca/LC_MESSAGES/Structural/README.po | 2 +- locale/es/LC_MESSAGES/Behavioral/README.po | 2 +- locale/es/LC_MESSAGES/Creational/README.po | 2 +- locale/es/LC_MESSAGES/Structural/README.po | 2 +- locale/pt_BR/LC_MESSAGES/Behavioral/README.po | 2 +- locale/pt_BR/LC_MESSAGES/Creational/README.po | 2 +- locale/pt_BR/LC_MESSAGES/Structural/README.po | 2 +- locale/zh_CN/LC_MESSAGES/Behavioral/README.po | 2 +- locale/zh_CN/LC_MESSAGES/Creational/README.po | 4 ++-- locale/zh_CN/LC_MESSAGES/Structural/README.po | 2 +- 15 files changed, 25 insertions(+), 19 deletions(-) diff --git a/Behavioral/README.rst b/Behavioral/README.rst index 646df1f..5577f4c 100644 --- a/Behavioral/README.rst +++ b/Behavioral/README.rst @@ -1,5 +1,5 @@ -Behavioral -========== +`Behavioral`__ +============== In software engineering, behavioral design patterns are design patterns that identify common communication patterns between objects and realize @@ -21,3 +21,5 @@ carrying out this communication. Strategy/README TemplateMethod/README Visitor/README + +.. __: http://en.wikipedia.org/wiki/Behavioral_pattern \ No newline at end of file diff --git a/Creational/README.rst b/Creational/README.rst index d908772..43b9c3b 100644 --- a/Creational/README.rst +++ b/Creational/README.rst @@ -1,5 +1,5 @@ -Creational -========== +`Creational`__ +============== In software engineering, creational design patterns are design patterns that deal with object creation mechanisms, trying to create objects in a @@ -20,3 +20,5 @@ this object creation. SimpleFactory/README Singleton/README StaticFactory/README + +.. __: http://en.wikipedia.org/wiki/Creational_pattern diff --git a/Structural/README.rst b/Structural/README.rst index f717b4a..fcf7c58 100644 --- a/Structural/README.rst +++ b/Structural/README.rst @@ -1,5 +1,5 @@ -Structural -========== +`Structural`__ +============== In Software Engineering, Structural Design Patterns are Design Patterns that ease the design by identifying a simple way to realize @@ -18,3 +18,5 @@ relationships between entities. FluentInterface/README Proxy/README Registry/README + +.. __: http://en.wikipedia.org/wiki/Structural_pattern \ No newline at end of file diff --git a/locale/ca/LC_MESSAGES/Behavioral/README.po b/locale/ca/LC_MESSAGES/Behavioral/README.po index bd66758..93ebd7c 100644 --- a/locale/ca/LC_MESSAGES/Behavioral/README.po +++ b/locale/ca/LC_MESSAGES/Behavioral/README.po @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/README.rst:2 -msgid "Behavioral" +msgid "`Behavioral`__" msgstr "" #: ../../Behavioral/README.rst:4 diff --git a/locale/ca/LC_MESSAGES/Creational/README.po b/locale/ca/LC_MESSAGES/Creational/README.po index d947d57..72f543b 100644 --- a/locale/ca/LC_MESSAGES/Creational/README.po +++ b/locale/ca/LC_MESSAGES/Creational/README.po @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Creational/README.rst:2 -msgid "Creational" +msgid "`Creational`__" msgstr "" #: ../../Creational/README.rst:4 diff --git a/locale/ca/LC_MESSAGES/Structural/README.po b/locale/ca/LC_MESSAGES/Structural/README.po index 928301e..7957330 100644 --- a/locale/ca/LC_MESSAGES/Structural/README.po +++ b/locale/ca/LC_MESSAGES/Structural/README.po @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/README.rst:2 -msgid "Structural" +msgid "`Structural`__" msgstr "" #: ../../Structural/README.rst:4 diff --git a/locale/es/LC_MESSAGES/Behavioral/README.po b/locale/es/LC_MESSAGES/Behavioral/README.po index bd66758..93ebd7c 100644 --- a/locale/es/LC_MESSAGES/Behavioral/README.po +++ b/locale/es/LC_MESSAGES/Behavioral/README.po @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/README.rst:2 -msgid "Behavioral" +msgid "`Behavioral`__" msgstr "" #: ../../Behavioral/README.rst:4 diff --git a/locale/es/LC_MESSAGES/Creational/README.po b/locale/es/LC_MESSAGES/Creational/README.po index d947d57..72f543b 100644 --- a/locale/es/LC_MESSAGES/Creational/README.po +++ b/locale/es/LC_MESSAGES/Creational/README.po @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Creational/README.rst:2 -msgid "Creational" +msgid "`Creational`__" msgstr "" #: ../../Creational/README.rst:4 diff --git a/locale/es/LC_MESSAGES/Structural/README.po b/locale/es/LC_MESSAGES/Structural/README.po index 928301e..7957330 100644 --- a/locale/es/LC_MESSAGES/Structural/README.po +++ b/locale/es/LC_MESSAGES/Structural/README.po @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/README.rst:2 -msgid "Structural" +msgid "`Structural`__" msgstr "" #: ../../Structural/README.rst:4 diff --git a/locale/pt_BR/LC_MESSAGES/Behavioral/README.po b/locale/pt_BR/LC_MESSAGES/Behavioral/README.po index bd66758..93ebd7c 100644 --- a/locale/pt_BR/LC_MESSAGES/Behavioral/README.po +++ b/locale/pt_BR/LC_MESSAGES/Behavioral/README.po @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/README.rst:2 -msgid "Behavioral" +msgid "`Behavioral`__" msgstr "" #: ../../Behavioral/README.rst:4 diff --git a/locale/pt_BR/LC_MESSAGES/Creational/README.po b/locale/pt_BR/LC_MESSAGES/Creational/README.po index d947d57..72f543b 100644 --- a/locale/pt_BR/LC_MESSAGES/Creational/README.po +++ b/locale/pt_BR/LC_MESSAGES/Creational/README.po @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Creational/README.rst:2 -msgid "Creational" +msgid "`Creational`__" msgstr "" #: ../../Creational/README.rst:4 diff --git a/locale/pt_BR/LC_MESSAGES/Structural/README.po b/locale/pt_BR/LC_MESSAGES/Structural/README.po index 928301e..7957330 100644 --- a/locale/pt_BR/LC_MESSAGES/Structural/README.po +++ b/locale/pt_BR/LC_MESSAGES/Structural/README.po @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/README.rst:2 -msgid "Structural" +msgid "`Structural`__" msgstr "" #: ../../Structural/README.rst:4 diff --git a/locale/zh_CN/LC_MESSAGES/Behavioral/README.po b/locale/zh_CN/LC_MESSAGES/Behavioral/README.po index bd66758..93ebd7c 100644 --- a/locale/zh_CN/LC_MESSAGES/Behavioral/README.po +++ b/locale/zh_CN/LC_MESSAGES/Behavioral/README.po @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Behavioral/README.rst:2 -msgid "Behavioral" +msgid "`Behavioral`__" msgstr "" #: ../../Behavioral/README.rst:4 diff --git a/locale/zh_CN/LC_MESSAGES/Creational/README.po b/locale/zh_CN/LC_MESSAGES/Creational/README.po index 951ebf7..61811f3 100644 --- a/locale/zh_CN/LC_MESSAGES/Creational/README.po +++ b/locale/zh_CN/LC_MESSAGES/Creational/README.po @@ -12,8 +12,8 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Creational/README.rst:2 -msgid "Creational" -msgstr "创建型设计模式" +msgid "`Creational`__" +msgstr "`创建型设计模式`__" #: ../../Creational/README.rst:4 msgid "" diff --git a/locale/zh_CN/LC_MESSAGES/Structural/README.po b/locale/zh_CN/LC_MESSAGES/Structural/README.po index 928301e..7957330 100644 --- a/locale/zh_CN/LC_MESSAGES/Structural/README.po +++ b/locale/zh_CN/LC_MESSAGES/Structural/README.po @@ -12,7 +12,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../Structural/README.rst:2 -msgid "Structural" +msgid "`Structural`__" msgstr "" #: ../../Structural/README.rst:4 From a7e6c4b5b243ccf634da3847b37547058352c644 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=93=D0=BB?= =?UTF-8?q?=D0=BE=D1=82=D0=BE=D0=B2?= Date: Sat, 30 May 2015 14:12:42 +0300 Subject: [PATCH 035/127] Russian translation part two ChainOfResp typo fix Null Object Visitor English version in page titles Delegation Template Method AbstractFactory Builder FactoryMethod Multiton Pool Prototype SimpleFactory Singleton StaticFactory Links to ru.wiki --- .../ChainOfResponsibilities/README.po | 2 +- .../LC_MESSAGES/Behavioral/Command/README.po | 2 +- .../LC_MESSAGES/Behavioral/Iterator/README.po | 2 +- .../LC_MESSAGES/Behavioral/Mediator/README.po | 2 +- .../Behavioral/NullObject/README.po | 57 +++++++++++-------- .../LC_MESSAGES/Behavioral/Observer/README.po | 2 +- locale/ru/LC_MESSAGES/Behavioral/README.po | 2 +- .../Behavioral/Specification/README.po | 2 +- .../ru/LC_MESSAGES/Behavioral/State/README.po | 2 +- .../LC_MESSAGES/Behavioral/Strategy/README.po | 2 +- .../Behavioral/TemplateMethod/README.po | 47 +++++++++------ .../LC_MESSAGES/Behavioral/Visitor/README.po | 40 +++++++------ .../Creational/AbstractFactory/README.po | 47 ++++++++------- .../LC_MESSAGES/Creational/Builder/README.po | 54 ++++++++++-------- .../Creational/FactoryMethod/README.po | 45 +++++++++------ .../LC_MESSAGES/Creational/Multiton/README.po | 32 +++++++---- .../ru/LC_MESSAGES/Creational/Pool/README.po | 43 +++++++++----- .../Creational/Prototype/README.po | 34 ++++++----- locale/ru/LC_MESSAGES/Creational/README.po | 16 ++++-- .../Creational/SimpleFactory/README.po | 37 ++++++------ .../Creational/Singleton/README.po | 38 ++++++++----- .../Creational/StaticFactory/README.po | 39 +++++++------ .../ru/LC_MESSAGES/More/Delegation/README.po | 32 +++++------ .../ru/LC_MESSAGES/More/Repository/README.po | 2 +- .../LC_MESSAGES/More/ServiceLocator/README.po | 2 +- locale/ru/LC_MESSAGES/Structural/README.po | 13 +++-- 26 files changed, 359 insertions(+), 237 deletions(-) diff --git a/locale/ru/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po b/locale/ru/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po index f9ece91..d0dcfac 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/ChainOfResponsibilities/README.po @@ -13,7 +13,7 @@ msgstr "" #: ../../Behavioral/ChainOfResponsibilities/README.rst:2 msgid "`Chain Of Responsibilities`__" -msgstr "`Цепочка обязанностей`__)" +msgstr "`Цепочка Обязанностей `_ (`Chain Of Responsibilities`__)" #: ../../Behavioral/ChainOfResponsibilities/README.rst:5 msgid "Purpose:" diff --git a/locale/ru/LC_MESSAGES/Behavioral/Command/README.po b/locale/ru/LC_MESSAGES/Behavioral/Command/README.po index 4654614..4780baa 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/Command/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/Command/README.po @@ -13,7 +13,7 @@ msgstr "" #: ../../Behavioral/Command/README.rst:2 msgid "`Command`__" -msgstr "`Команда`__" +msgstr "`Команда `_ (`Command`__)" #: ../../Behavioral/Command/README.rst:5 msgid "Purpose" diff --git a/locale/ru/LC_MESSAGES/Behavioral/Iterator/README.po b/locale/ru/LC_MESSAGES/Behavioral/Iterator/README.po index 9f0543c..1d5061d 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/Iterator/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/Iterator/README.po @@ -13,7 +13,7 @@ msgstr "" #: ../../Behavioral/Iterator/README.rst:2 msgid "`Iterator`__" -msgstr "`Итератор`__" +msgstr "`Итератор `_ (`Iterator`__)" #: ../../Behavioral/Iterator/README.rst:5 msgid "Purpose" diff --git a/locale/ru/LC_MESSAGES/Behavioral/Mediator/README.po b/locale/ru/LC_MESSAGES/Behavioral/Mediator/README.po index bfd28b8..13b8089 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/Mediator/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/Mediator/README.po @@ -15,7 +15,7 @@ msgstr "" #: ../../Behavioral/Mediator/README.rst:2 msgid "`Mediator`__" -msgstr "`Посредник`__" +msgstr "`Посредник `_ (`Mediator`__)" #: ../../Behavioral/Mediator/README.rst:5 msgid "Purpose" diff --git a/locale/ru/LC_MESSAGES/Behavioral/NullObject/README.po b/locale/ru/LC_MESSAGES/Behavioral/NullObject/README.po index 35b77f6..7560c18 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/NullObject/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/NullObject/README.po @@ -1,41 +1,46 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-30 14:24+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Behavioral/NullObject/README.rst:2 msgid "`Null Object`__" -msgstr "" +msgstr "`Объект Null `_ (`Null Object`__)" #: ../../Behavioral/NullObject/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Behavioral/NullObject/README.rst:7 msgid "" -"NullObject is not a GoF design pattern but a schema which appears frequently" -" enough to be considered a pattern. It has the following benefits:" +"NullObject is not a GoF design pattern but a schema which appears " +"frequently enough to be considered a pattern. It has the following benefits:" msgstr "" +"NullObject не шаблон из книги Банды Четырёх, но схема, которая появляется " +"достаточно часто, чтобы считаться паттерном. Она имеет следующие " +"преимущества:" #: ../../Behavioral/NullObject/README.rst:11 msgid "Client code is simplified" -msgstr "" +msgstr "Клиентский код упрощается" #: ../../Behavioral/NullObject/README.rst:12 msgid "Reduces the chance of null pointer exceptions" msgstr "" +"Уменьшает шанс исключений из-за нулевых указателей (и ошибок PHP различного " +"уровня)" #: ../../Behavioral/NullObject/README.rst:13 msgid "Fewer conditionals require less test cases" -msgstr "" +msgstr "Меньше дополнительных условий — значит меньше тесткейсов" #: ../../Behavioral/NullObject/README.rst:15 msgid "" @@ -45,59 +50,63 @@ msgid "" "``$obj->callSomething();`` by eliminating the conditional check in client " "code." msgstr "" +"Методы, которые возвращают объект или Null, вместо этого должны вернуть " +"объект ``NullObject``. Это упрощённый формальный код, устраняющий " +"необходимость проверки ``if (!is_null($obj)) { $obj->callSomething(); }``, " +"заменяя её на обычный вызов ``$obj->callSomething();``." #: ../../Behavioral/NullObject/README.rst:22 msgid "Examples" -msgstr "" +msgstr "Примеры" #: ../../Behavioral/NullObject/README.rst:24 msgid "Symfony2: null logger of profiler" -msgstr "" +msgstr "Symfony2: null logger of profiler" #: ../../Behavioral/NullObject/README.rst:25 msgid "Symfony2: null output in Symfony/Console" -msgstr "" +msgstr "Symfony2: null output in Symfony/Console" #: ../../Behavioral/NullObject/README.rst:26 msgid "null handler in a Chain of Responsibilities pattern" -msgstr "" +msgstr "null handler in a Chain of Responsibilities pattern" #: ../../Behavioral/NullObject/README.rst:27 msgid "null command in a Command pattern" -msgstr "" +msgstr "null command in a Command pattern" #: ../../Behavioral/NullObject/README.rst:30 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Behavioral/NullObject/README.rst:37 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Behavioral/NullObject/README.rst:39 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Behavioral/NullObject/README.rst:41 msgid "Service.php" -msgstr "" +msgstr "Service.php" #: ../../Behavioral/NullObject/README.rst:47 msgid "LoggerInterface.php" -msgstr "" +msgstr "LoggerInterface.php" #: ../../Behavioral/NullObject/README.rst:53 msgid "PrintLogger.php" -msgstr "" +msgstr "PrintLogger.php" #: ../../Behavioral/NullObject/README.rst:59 msgid "NullLogger.php" -msgstr "" +msgstr "NullLogger.php" #: ../../Behavioral/NullObject/README.rst:66 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../Behavioral/NullObject/README.rst:68 msgid "Tests/LoggerTest.php" -msgstr "" +msgstr "Tests/LoggerTest.php" diff --git a/locale/ru/LC_MESSAGES/Behavioral/Observer/README.po b/locale/ru/LC_MESSAGES/Behavioral/Observer/README.po index 9c2a830..fbd4f45 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/Observer/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/Observer/README.po @@ -13,7 +13,7 @@ msgstr "" #: ../../Behavioral/Observer/README.rst:2 msgid "`Observer`__" -msgstr "`Наблюдатель`__" +msgstr "`Наблюдатель `_ (`Observer`__)" #: ../../Behavioral/Observer/README.rst:5 msgid "Purpose" diff --git a/locale/ru/LC_MESSAGES/Behavioral/README.po b/locale/ru/LC_MESSAGES/Behavioral/README.po index 8564706..1726bb0 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/README.po @@ -13,7 +13,7 @@ msgstr "" #: ../../Behavioral/README.rst:2 msgid "Behavioral" -msgstr "Поведенческие шаблоны проектирования" +msgstr "`Поведенческие шаблоны проектирования `_ (Behavioral)" #: ../../Behavioral/README.rst:4 msgid "" diff --git a/locale/ru/LC_MESSAGES/Behavioral/Specification/README.po b/locale/ru/LC_MESSAGES/Behavioral/Specification/README.po index b35674b..5c318ca 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/Specification/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/Specification/README.po @@ -13,7 +13,7 @@ msgstr "" #: ../../Behavioral/Specification/README.rst:2 msgid "`Specification`__" -msgstr "`Спецификация`__" +msgstr "`Спецификация `_ (`Specification`__)" #: ../../Behavioral/Specification/README.rst:5 msgid "Purpose" diff --git a/locale/ru/LC_MESSAGES/Behavioral/State/README.po b/locale/ru/LC_MESSAGES/Behavioral/State/README.po index a6eded9..8fa08d0 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/State/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/State/README.po @@ -13,7 +13,7 @@ msgstr "" #: ../../Behavioral/State/README.rst:2 msgid "`State`__" -msgstr "`Состояние`__" +msgstr "`Состояние `_ (`State`__)" #: ../../Behavioral/State/README.rst:5 msgid "Purpose" diff --git a/locale/ru/LC_MESSAGES/Behavioral/Strategy/README.po b/locale/ru/LC_MESSAGES/Behavioral/Strategy/README.po index 166b20c..cdd3bd5 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/Strategy/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/Strategy/README.po @@ -13,7 +13,7 @@ msgstr "" #: ../../Behavioral/Strategy/README.rst:2 msgid "`Strategy`__" -msgstr "`Стратегия`__" +msgstr "`Стратегия `_ (`Strategy`__)" #: ../../Behavioral/Strategy/README.rst:5 msgid "Terminology:" diff --git a/locale/ru/LC_MESSAGES/Behavioral/TemplateMethod/README.po b/locale/ru/LC_MESSAGES/Behavioral/TemplateMethod/README.po index 4f6fa81..2c0b68e 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/TemplateMethod/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/TemplateMethod/README.po @@ -1,27 +1,29 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-30 18:41+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Language-Team: \n" +"X-Generator: Poedit 1.8.1\n" #: ../../Behavioral/TemplateMethod/README.rst:2 msgid "`Template Method`__" -msgstr "" +msgstr "`Шаблонный Метод `_ (`Template Method`__)" #: ../../Behavioral/TemplateMethod/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Behavioral/TemplateMethod/README.rst:7 msgid "Template Method is a behavioral design pattern." -msgstr "" +msgstr "Шаблонный метод, это поведенческий паттерн проектирования." #: ../../Behavioral/TemplateMethod/README.rst:9 msgid "" @@ -29,6 +31,9 @@ msgid "" "subclasses of this abstract template \"finish\" the behavior of an " "algorithm." msgstr "" +"Возможно, вы сталкивались с этим уже много раз. Идея состоит в том, чтобы " +"позволить наследникам абстрактного шаблона переопределить поведение " +"алгоритмов родителя." #: ../../Behavioral/TemplateMethod/README.rst:13 msgid "" @@ -36,6 +41,9 @@ msgid "" "class is not called by subclasses but the inverse. How? With abstraction of " "course." msgstr "" +"Как в «Голливудском принципе»: «Не звоните нам, мы сами вам позвоним». Этот " +"класс не вызывается подклассами, но наоборот: подклассы вызываются " +"родителем. Как? С помощью метода в родительской абстракции, конечно." #: ../../Behavioral/TemplateMethod/README.rst:17 msgid "" @@ -43,41 +51,46 @@ msgid "" "libraries. The user has just to implement one method and the superclass do " "the job." msgstr "" +"Другими словами, это каркас алгоритма, который хорошо подходит для " +"библиотек (в фреймворках, например). Пользователь просто реализует " +"уточняющие методы, а суперкласс делает всю основную работу." #: ../../Behavioral/TemplateMethod/README.rst:21 msgid "" -"It is an easy way to decouple concrete classes and reduce copy-paste, that's" -" why you'll find it everywhere." +"It is an easy way to decouple concrete classes and reduce copy-paste, " +"that's why you'll find it everywhere." msgstr "" +"Это простой способ изолировать логику в конкретные классы и уменьшить " +"копипаст, поэтому вы повсеместно встретите его в том или ином виде." #: ../../Behavioral/TemplateMethod/README.rst:25 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Behavioral/TemplateMethod/README.rst:32 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Behavioral/TemplateMethod/README.rst:34 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Behavioral/TemplateMethod/README.rst:36 msgid "Journey.php" -msgstr "" +msgstr "Journey.php" #: ../../Behavioral/TemplateMethod/README.rst:42 msgid "BeachJourney.php" -msgstr "" +msgstr "BeachJourney.php" #: ../../Behavioral/TemplateMethod/README.rst:48 msgid "CityJourney.php" -msgstr "" +msgstr "CityJourney.php" #: ../../Behavioral/TemplateMethod/README.rst:55 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../Behavioral/TemplateMethod/README.rst:57 msgid "Tests/JourneyTest.php" -msgstr "" +msgstr "Tests/JourneyTest.php" diff --git a/locale/ru/LC_MESSAGES/Behavioral/Visitor/README.po b/locale/ru/LC_MESSAGES/Behavioral/Visitor/README.po index cab0ea9..5bd8647 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/Visitor/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/Visitor/README.po @@ -1,23 +1,23 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-30 14:44+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Behavioral/Visitor/README.rst:2 msgid "`Visitor`__" -msgstr "" +msgstr "`Посетитель `_ (`Visitor`__)" #: ../../Behavioral/Visitor/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Behavioral/Visitor/README.rst:7 msgid "" @@ -26,6 +26,11 @@ msgid "" " classes have to define a contract to allow visitors (the ``Role::accept`` " "method in the example)." msgstr "" +"Шаблон «Посетитель» выполняет операции над объектами других классов. " +"Главной целью является сохранение разделения направленности задач " +"отдельных классов. При этом классы обязаны определить специальный " +"контракт, чтобы позволить использовать их Посетителям (метод «принять " +"роль» ``Role::accept`` в примере)." #: ../../Behavioral/Visitor/README.rst:12 msgid "" @@ -33,43 +38,46 @@ msgid "" "In that case, each Visitor has to choose itself which method to invoke on " "the visitor." msgstr "" +"Контракт, как правило, это абстрактный класс, но вы можете использовать " +"чистый интерфейс. В этом случае, каждый посетитель должен сам выбирать, " +"какой метод ссылается на посетителя." #: ../../Behavioral/Visitor/README.rst:17 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Behavioral/Visitor/README.rst:24 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Behavioral/Visitor/README.rst:26 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Behavioral/Visitor/README.rst:28 msgid "RoleVisitorInterface.php" -msgstr "" +msgstr "RoleVisitorInterface.php" #: ../../Behavioral/Visitor/README.rst:34 msgid "RolePrintVisitor.php" -msgstr "" +msgstr "RolePrintVisitor.php" #: ../../Behavioral/Visitor/README.rst:40 msgid "Role.php" -msgstr "" +msgstr "Role.php" #: ../../Behavioral/Visitor/README.rst:46 msgid "User.php" -msgstr "" +msgstr "User.php" #: ../../Behavioral/Visitor/README.rst:52 msgid "Group.php" -msgstr "" +msgstr "Group.php" #: ../../Behavioral/Visitor/README.rst:59 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../Behavioral/Visitor/README.rst:61 msgid "Tests/VisitorTest.php" -msgstr "" +msgstr "Tests/VisitorTest.php" diff --git a/locale/ru/LC_MESSAGES/Creational/AbstractFactory/README.po b/locale/ru/LC_MESSAGES/Creational/AbstractFactory/README.po index 04a383e..c5afbaf 100644 --- a/locale/ru/LC_MESSAGES/Creational/AbstractFactory/README.po +++ b/locale/ru/LC_MESSAGES/Creational/AbstractFactory/README.po @@ -1,23 +1,25 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-30 22:25+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Creational/AbstractFactory/README.rst:2 msgid "`Abstract Factory`__" msgstr "" +"`Абстрактная фабрика `_ (`Abstract Factory`__)" #: ../../Creational/AbstractFactory/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Creational/AbstractFactory/README.rst:7 msgid "" @@ -26,63 +28,68 @@ msgid "" "interface. The client of the abstract factory does not care about how these " "objects are created, he just knows how they go together." msgstr "" +"Создать ряд связанных или зависимых объектов без указания их конкретных " +"классов. Обычно создаваемые классы стремятся реализовать один и тот же " +"интерфейс. Клиент абстрактной фабрики не заботится о том, как создаются эти " +"объекты, он просто знает, по каким признакам они взаимосвязаны и как с ними " +"обращаться." #: ../../Creational/AbstractFactory/README.rst:13 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Creational/AbstractFactory/README.rst:20 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Creational/AbstractFactory/README.rst:22 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Creational/AbstractFactory/README.rst:24 msgid "AbstractFactory.php" -msgstr "" +msgstr "AbstractFactory.php" #: ../../Creational/AbstractFactory/README.rst:30 msgid "JsonFactory.php" -msgstr "" +msgstr "JsonFactory.php" #: ../../Creational/AbstractFactory/README.rst:36 msgid "HtmlFactory.php" -msgstr "" +msgstr "HtmlFactory.php" #: ../../Creational/AbstractFactory/README.rst:42 msgid "MediaInterface.php" -msgstr "" +msgstr "MediaInterface.php" #: ../../Creational/AbstractFactory/README.rst:48 msgid "Picture.php" -msgstr "" +msgstr "Picture.php" #: ../../Creational/AbstractFactory/README.rst:54 msgid "Text.php" -msgstr "" +msgstr "Text.php" #: ../../Creational/AbstractFactory/README.rst:60 msgid "Json/Picture.php" -msgstr "" +msgstr "Json/Picture.php" #: ../../Creational/AbstractFactory/README.rst:66 msgid "Json/Text.php" -msgstr "" +msgstr "Json/Text.php" #: ../../Creational/AbstractFactory/README.rst:72 msgid "Html/Picture.php" -msgstr "" +msgstr "Html/Picture.php" #: ../../Creational/AbstractFactory/README.rst:78 msgid "Html/Text.php" -msgstr "" +msgstr "Html/Text.php" #: ../../Creational/AbstractFactory/README.rst:85 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../Creational/AbstractFactory/README.rst:87 msgid "Tests/AbstractFactoryTest.php" -msgstr "" +msgstr "Tests/AbstractFactoryTest.php" diff --git a/locale/ru/LC_MESSAGES/Creational/Builder/README.po b/locale/ru/LC_MESSAGES/Creational/Builder/README.po index 79d4fe3..27793e5 100644 --- a/locale/ru/LC_MESSAGES/Creational/Builder/README.po +++ b/locale/ru/LC_MESSAGES/Creational/Builder/README.po @@ -1,110 +1,118 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-30 22:36+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Creational/Builder/README.rst:2 msgid "`Builder`__" msgstr "" +"`Строитель `_ (`Builder`__)" #: ../../Creational/Builder/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Creational/Builder/README.rst:7 msgid "Builder is an interface that build parts of a complex object." -msgstr "" +msgstr "Строитель — это интерфейс для производства частей сложного объекта." #: ../../Creational/Builder/README.rst:9 msgid "" "Sometimes, if the builder has a better knowledge of what it builds, this " "interface could be an abstract class with default methods (aka adapter)." msgstr "" +"Иногда, если Строитель лучше знает о том, что он строит, этот интерфейс " +"может быть абстрактным классом с методами по-умолчанию (адаптер)." #: ../../Creational/Builder/README.rst:12 msgid "" "If you have a complex inheritance tree for objects, it is logical to have a " "complex inheritance tree for builders too." msgstr "" +"Если у вас есть сложное дерево наследования для объектов, логично иметь " +"сложное дерево наследования и для их строителей." #: ../../Creational/Builder/README.rst:15 msgid "" "Note: Builders have often a fluent interface, see the mock builder of " "PHPUnit for example." msgstr "" +"Примечание: Строители могут иметь `текучий интерфейс `_, например, строитель макетов в PHPUnit." #: ../../Creational/Builder/README.rst:19 msgid "Examples" -msgstr "" +msgstr "Примеры" #: ../../Creational/Builder/README.rst:21 msgid "PHPUnit: Mock Builder" -msgstr "" +msgstr "PHPUnit: Mock Builder" #: ../../Creational/Builder/README.rst:24 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Creational/Builder/README.rst:31 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Creational/Builder/README.rst:33 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Creational/Builder/README.rst:35 msgid "Director.php" -msgstr "" +msgstr "Director.php" #: ../../Creational/Builder/README.rst:41 msgid "BuilderInterface.php" -msgstr "" +msgstr "BuilderInterface.php" #: ../../Creational/Builder/README.rst:47 msgid "BikeBuilder.php" -msgstr "" +msgstr "BikeBuilder.php" #: ../../Creational/Builder/README.rst:53 msgid "CarBuilder.php" -msgstr "" +msgstr "CarBuilder.php" #: ../../Creational/Builder/README.rst:59 msgid "Parts/Vehicle.php" -msgstr "" +msgstr "Parts/Vehicle.php" #: ../../Creational/Builder/README.rst:65 msgid "Parts/Bike.php" -msgstr "" +msgstr "Parts/Bike.php" #: ../../Creational/Builder/README.rst:71 msgid "Parts/Car.php" -msgstr "" +msgstr "Parts/Car.php" #: ../../Creational/Builder/README.rst:77 msgid "Parts/Engine.php" -msgstr "" +msgstr "Parts/Engine.php" #: ../../Creational/Builder/README.rst:83 msgid "Parts/Wheel.php" -msgstr "" +msgstr "Parts/Wheel.php" #: ../../Creational/Builder/README.rst:89 msgid "Parts/Door.php" -msgstr "" +msgstr "Parts/Door.php" #: ../../Creational/Builder/README.rst:96 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../Creational/Builder/README.rst:98 msgid "Tests/DirectorTest.php" -msgstr "" +msgstr "Tests/DirectorTest.php" diff --git a/locale/ru/LC_MESSAGES/Creational/FactoryMethod/README.po b/locale/ru/LC_MESSAGES/Creational/FactoryMethod/README.po index b65c56b..6b7a3f8 100644 --- a/locale/ru/LC_MESSAGES/Creational/FactoryMethod/README.po +++ b/locale/ru/LC_MESSAGES/Creational/FactoryMethod/README.po @@ -1,90 +1,101 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-30 22:46+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Creational/FactoryMethod/README.rst:2 msgid "`Factory Method`__" msgstr "" +"`Фабричный Метод `_ (`Factory Method`__)" #: ../../Creational/FactoryMethod/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Creational/FactoryMethod/README.rst:7 msgid "" "The good point over the SimpleFactory is you can subclass it to implement " "different ways to create objects" msgstr "" +"Выгодное отличие от SimpleFactory в том, что вы можете вынести реализацию " +"создания объектов в подклассы." #: ../../Creational/FactoryMethod/README.rst:10 msgid "For simple case, this abstract class could be just an interface" msgstr "" +"В простых случаях, этот абстрактный класс может быть только интерфейсом." #: ../../Creational/FactoryMethod/README.rst:12 msgid "" "This pattern is a \"real\" Design Pattern because it achieves the " "\"Dependency Inversion Principle\" a.k.a the \"D\" in S.O.L.I.D principles." msgstr "" +"Этот паттерн является «настоящим» Шаблоном Проектирования, потому что он " +"следует «Принципу инверсии зависимостей\" ака \"D\" в `S.O.L.I.D `_." #: ../../Creational/FactoryMethod/README.rst:15 msgid "" "It means the FactoryMethod class depends on abstractions, not concrete " "classes. This is the real trick compared to SimpleFactory or StaticFactory." msgstr "" +"Это означает, что класс FactoryMethod зависит от абстракций, а не от " +"конкретных классов. Это существенный плюс в сравнении с SimpleFactory или " +"StaticFactory." #: ../../Creational/FactoryMethod/README.rst:20 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Creational/FactoryMethod/README.rst:27 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Creational/FactoryMethod/README.rst:29 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Creational/FactoryMethod/README.rst:31 msgid "FactoryMethod.php" -msgstr "" +msgstr "FactoryMethod.php" #: ../../Creational/FactoryMethod/README.rst:37 msgid "ItalianFactory.php" -msgstr "" +msgstr "ItalianFactory.php" #: ../../Creational/FactoryMethod/README.rst:43 msgid "GermanFactory.php" -msgstr "" +msgstr "GermanFactory.php" #: ../../Creational/FactoryMethod/README.rst:49 msgid "VehicleInterface.php" -msgstr "" +msgstr "VehicleInterface.php" #: ../../Creational/FactoryMethod/README.rst:55 msgid "Porsche.php" -msgstr "" +msgstr "Porsche.php" #: ../../Creational/FactoryMethod/README.rst:61 msgid "Bicycle.php" -msgstr "" +msgstr "Bicycle.php" #: ../../Creational/FactoryMethod/README.rst:67 msgid "Ferrari.php" -msgstr "" +msgstr "Ferrari.php" #: ../../Creational/FactoryMethod/README.rst:74 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../Creational/FactoryMethod/README.rst:76 msgid "Tests/FactoryMethodTest.php" -msgstr "" +msgstr "Tests/FactoryMethodTest.php" diff --git a/locale/ru/LC_MESSAGES/Creational/Multiton/README.po b/locale/ru/LC_MESSAGES/Creational/Multiton/README.po index 702271d..43ff0de 100644 --- a/locale/ru/LC_MESSAGES/Creational/Multiton/README.po +++ b/locale/ru/LC_MESSAGES/Creational/Multiton/README.po @@ -1,64 +1,72 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-30 22:58+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Creational/Multiton/README.rst:2 msgid "Multiton" -msgstr "" +msgstr "Пул одиночек (Multiton)" #: ../../Creational/Multiton/README.rst:4 msgid "" "**THIS IS CONSIDERED TO BE AN ANTI-PATTERN! FOR BETTER TESTABILITY AND " "MAINTAINABILITY USE DEPENDENCY INJECTION!**" msgstr "" +"**Это считается анти-паттерном! Для лучшей тестируемости и сопровождения " +"кода используйте Инъекцию Зависимости (Dependency Injection)!**" #: ../../Creational/Multiton/README.rst:8 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Creational/Multiton/README.rst:10 msgid "" "To have only a list of named instances that are used, like a singleton but " "with n instances." msgstr "" +"Содержит список именованных созданных экземпляров классов, которые в итоге " +"используются как Singleton-ы, но в заданном заранее N-ном количестве." #: ../../Creational/Multiton/README.rst:14 msgid "Examples" -msgstr "" +msgstr "Примеры" #: ../../Creational/Multiton/README.rst:16 msgid "2 DB Connectors, e.g. one for MySQL, the other for SQLite" msgstr "" +"Два объекта для доступа к базам данных, к примеру, один для MySQL, а " +"второй для SQLite" #: ../../Creational/Multiton/README.rst:17 msgid "multiple Loggers (one for debug messages, one for errors)" msgstr "" +"Несколько логгирующих объектов (один для отладочных сообщений, другой для " +"ошибок и т.п.) " #: ../../Creational/Multiton/README.rst:20 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Creational/Multiton/README.rst:27 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Creational/Multiton/README.rst:29 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Creational/Multiton/README.rst:31 msgid "Multiton.php" -msgstr "" +msgstr "Multiton.php" #: ../../Creational/Multiton/README.rst:38 msgid "Test" -msgstr "" +msgstr "Тест" diff --git a/locale/ru/LC_MESSAGES/Creational/Pool/README.po b/locale/ru/LC_MESSAGES/Creational/Pool/README.po index 8defedd..1b35b8b 100644 --- a/locale/ru/LC_MESSAGES/Creational/Pool/README.po +++ b/locale/ru/LC_MESSAGES/Creational/Pool/README.po @@ -1,19 +1,20 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-30 23:08+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Creational/Pool/README.rst:2 msgid "`Pool`__" msgstr "" +"`Объектный пул `_ (`Pool`__)" #: ../../Creational/Pool/README.rst:4 msgid "" @@ -24,6 +25,9 @@ msgid "" "object. When the client has finished, it returns the object, which is a " "specific type of factory object, to the pool rather than destroying it." msgstr "" +"Порождающий паттерн, который предоставляет набор заранее инициализированных " +"объектов, готовых к использованию («пул»), что не требует каждый раз " +"создавать и уничтожать их." #: ../../Creational/Pool/README.rst:11 msgid "" @@ -34,6 +38,12 @@ msgid "" "creation of the new objects (especially over network) may take variable " "time." msgstr "" +"Хранение объектов в пуле может заметно повысить производительность в " +"ситуациях, когда стоимость инициализации экземпляра класса высока, скорость " +"экземпляра класса высока, а количество одновременно используемых " +"экземпляров в любой момент времени является низкой. Время на извлечение " +"объекта из пула легко прогнозируется, в отличие от создания новых объектов " +"(особенно с сетевым оверхедом), что занимает неопределённое время." #: ../../Creational/Pool/README.rst:18 msgid "" @@ -43,39 +53,46 @@ msgid "" "simple object pooling (that hold no external resources, but only occupy " "memory) may not be efficient and could decrease performance." msgstr "" +"Однако эти преимущества в основном относится к объектам, которые изначально " +"являются дорогостоящими по времени создания. Например, соединения с базой " +"данных, соединения сокетов, потоков и инициализация больших графических " +"объектов, таких как шрифты или растровые изображения. В некоторых " +"ситуациях, использование простого пула объектов (которые не зависят от " +"внешних ресурсов, а только занимают память) может оказаться неэффективным и " +"приведёт к снижению производительности." #: ../../Creational/Pool/README.rst:25 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Creational/Pool/README.rst:32 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Creational/Pool/README.rst:34 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Creational/Pool/README.rst:36 msgid "Pool.php" -msgstr "" +msgstr "Pool.php" #: ../../Creational/Pool/README.rst:42 msgid "Processor.php" -msgstr "" +msgstr "Processor.php" #: ../../Creational/Pool/README.rst:48 msgid "Worker.php" -msgstr "" +msgstr "Worker.php" #: ../../Creational/Pool/README.rst:55 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../Creational/Pool/README.rst:57 msgid "Tests/PoolTest.php" -msgstr "" +msgstr "Tests/PoolTest.php" #: ../../Creational/Pool/README.rst:63 msgid "Tests/TestWorker.php" -msgstr "" +msgstr "Tests/TestWorker.php" diff --git a/locale/ru/LC_MESSAGES/Creational/Prototype/README.po b/locale/ru/LC_MESSAGES/Creational/Prototype/README.po index fac09ef..72b1ebc 100644 --- a/locale/ru/LC_MESSAGES/Creational/Prototype/README.po +++ b/locale/ru/LC_MESSAGES/Creational/Prototype/README.po @@ -1,68 +1,74 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-30 23:13+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Creational/Prototype/README.rst:2 msgid "`Prototype`__" msgstr "" +"`Прототип `_ (`Prototype`__)" #: ../../Creational/Prototype/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Creational/Prototype/README.rst:7 msgid "" "To avoid the cost of creating objects the standard way (new Foo()) and " "instead create a prototype and clone it." msgstr "" +"Помогает избежать затрат на создание объектов стандартным способом (new " +"Foo()), а вместо этого создаёт прототип и затем клонирует его." #: ../../Creational/Prototype/README.rst:11 msgid "Examples" -msgstr "" +msgstr "Примеры" #: ../../Creational/Prototype/README.rst:13 msgid "" "Large amounts of data (e.g. create 1,000,000 rows in a database at once via " "a ORM)." msgstr "" +"Большие объемы данных (например, создать 1000000 строк в базе данных сразу " +"через ORM)." #: ../../Creational/Prototype/README.rst:17 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Creational/Prototype/README.rst:24 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Creational/Prototype/README.rst:26 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Creational/Prototype/README.rst:28 msgid "index.php" -msgstr "" +msgstr "index.php" #: ../../Creational/Prototype/README.rst:34 msgid "BookPrototype.php" -msgstr "" +msgstr "BookPrototype.php" #: ../../Creational/Prototype/README.rst:40 msgid "BarBookPrototype.php" -msgstr "" +msgstr "BarBookPrototype.php" #: ../../Creational/Prototype/README.rst:46 msgid "FooBookPrototype.php" -msgstr "" +msgstr "FooBookPrototype.php" #: ../../Creational/Prototype/README.rst:53 msgid "Test" -msgstr "" +msgstr "Тест" diff --git a/locale/ru/LC_MESSAGES/Creational/README.po b/locale/ru/LC_MESSAGES/Creational/README.po index d947d57..9a8358a 100644 --- a/locale/ru/LC_MESSAGES/Creational/README.po +++ b/locale/ru/LC_MESSAGES/Creational/README.po @@ -1,19 +1,19 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-30 23:11+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Creational/README.rst:2 msgid "Creational" -msgstr "" +msgstr "Порождающие шаблоны проектирования (Creational)" #: ../../Creational/README.rst:4 msgid "" @@ -23,3 +23,9 @@ msgid "" " design problems or added complexity to the design. Creational design " "patterns solve this problem by somehow controlling this object creation." msgstr "" +"В разработке программного обеспечения, Порождающие шаблоны проектирования – " +"это паттерны, которые имеют дело с механизмами создания объекта и пытаются " +"создать объекты в порядке, подходящем к ситуации. Обычная форма создания " +"объекта может привести к проблемам проектирования или увеличивать сложность " +"конструкции. Порождающие шаблоны проектирования решают эту проблему, " +"определённым образом контролируя процесс создания объекта." diff --git a/locale/ru/LC_MESSAGES/Creational/SimpleFactory/README.po b/locale/ru/LC_MESSAGES/Creational/SimpleFactory/README.po index d011ad6..fdec3c4 100644 --- a/locale/ru/LC_MESSAGES/Creational/SimpleFactory/README.po +++ b/locale/ru/LC_MESSAGES/Creational/SimpleFactory/README.po @@ -1,72 +1,77 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-30 23:17+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Creational/SimpleFactory/README.rst:2 msgid "Simple Factory" -msgstr "" +msgstr "Простая Фабрика (Simple Factory)" #: ../../Creational/SimpleFactory/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Creational/SimpleFactory/README.rst:7 msgid "ConcreteFactory is a simple factory pattern." -msgstr "" +msgstr "ConcreteFactory в примере ниже, это паттерн «Простая Фабрика»." #: ../../Creational/SimpleFactory/README.rst:9 msgid "" "It differs from the static factory because it is NOT static and as you know:" " static => global => evil!" msgstr "" +"Она отличается от Статической Фабрики тем, что собственно *не является " +"статической*. Потому как вы должны знаеть: статическая => глобальная => зло!" #: ../../Creational/SimpleFactory/README.rst:12 msgid "" "Therefore, you can have multiple factories, differently parametrized, you " "can subclass it and you can mock-up it." msgstr "" +"Таким образом, вы можете иметь несколько фабрик, параметризованных " +"различным образом. Вы можете унаследовать их и создавать макеты для " +"тестирования." #: ../../Creational/SimpleFactory/README.rst:16 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Creational/SimpleFactory/README.rst:23 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Creational/SimpleFactory/README.rst:25 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Creational/SimpleFactory/README.rst:27 msgid "ConcreteFactory.php" -msgstr "" +msgstr "ConcreteFactory.php" #: ../../Creational/SimpleFactory/README.rst:33 msgid "VehicleInterface.php" -msgstr "" +msgstr "VehicleInterface.php" #: ../../Creational/SimpleFactory/README.rst:39 msgid "Bicycle.php" -msgstr "" +msgstr "Bicycle.php" #: ../../Creational/SimpleFactory/README.rst:45 msgid "Scooter.php" -msgstr "" +msgstr "Scooter.php" #: ../../Creational/SimpleFactory/README.rst:52 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../Creational/SimpleFactory/README.rst:54 msgid "Tests/SimpleFactoryTest.php" -msgstr "" +msgstr "Tests/SimpleFactoryTest.php" diff --git a/locale/ru/LC_MESSAGES/Creational/Singleton/README.po b/locale/ru/LC_MESSAGES/Creational/Singleton/README.po index 5d108ca..a08f6d4 100644 --- a/locale/ru/LC_MESSAGES/Creational/Singleton/README.po +++ b/locale/ru/LC_MESSAGES/Creational/Singleton/README.po @@ -1,75 +1,87 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-30 23:20+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Creational/Singleton/README.rst:2 msgid "`Singleton`__" msgstr "" +"`Одиночка `_ (`Singleton`__)" #: ../../Creational/Singleton/README.rst:4 msgid "" "**THIS IS CONSIDERED TO BE AN ANTI-PATTERN! FOR BETTER TESTABILITY AND " "MAINTAINABILITY USE DEPENDENCY INJECTION!**" msgstr "" +"**Это считается анти-паттерном! Для лучшей тестируемости и " +"сопровождения кода используйте Инъекцию Зависимости (Dependency " +"Injection)!**" #: ../../Creational/Singleton/README.rst:8 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Creational/Singleton/README.rst:10 msgid "" "To have only one instance of this object in the application that will handle" " all calls." msgstr "" +"Позволяет содержать только один экземпляр объекта в приложении, " +"которое будет обрабатывать все обращения, запрещая создавать новый " +"экземпляр." #: ../../Creational/Singleton/README.rst:14 msgid "Examples" -msgstr "" +msgstr "Примеры" #: ../../Creational/Singleton/README.rst:16 msgid "DB Connector" -msgstr "" +msgstr "DB Connector для подключения к базе данных" #: ../../Creational/Singleton/README.rst:17 msgid "" "Logger (may also be a Multiton if there are many log files for several " "purposes)" msgstr "" +"Logger (также может быть Multiton если есть много журналов для " +"нескольких целей)" #: ../../Creational/Singleton/README.rst:19 msgid "" "Lock file for the application (there is only one in the filesystem ...)" msgstr "" +"Блокировка файла в приложении (есть только один в файловой системе с " +"одновременным доступом к нему)" #: ../../Creational/Singleton/README.rst:23 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Creational/Singleton/README.rst:30 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Creational/Singleton/README.rst:32 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Creational/Singleton/README.rst:34 msgid "Singleton.php" -msgstr "" +msgstr "Singleton.php" #: ../../Creational/Singleton/README.rst:41 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../Creational/Singleton/README.rst:43 msgid "Tests/SingletonTest.php" -msgstr "" +msgstr "Tests/SingletonTest.php" diff --git a/locale/ru/LC_MESSAGES/Creational/StaticFactory/README.po b/locale/ru/LC_MESSAGES/Creational/StaticFactory/README.po index 4a6f64e..34f34a5 100644 --- a/locale/ru/LC_MESSAGES/Creational/StaticFactory/README.po +++ b/locale/ru/LC_MESSAGES/Creational/StaticFactory/README.po @@ -1,23 +1,23 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-30 23:24+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Creational/StaticFactory/README.rst:2 msgid "Static Factory" -msgstr "" +msgstr "Статическая Фабрика (Static Factory)" #: ../../Creational/StaticFactory/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Creational/StaticFactory/README.rst:7 msgid "" @@ -27,49 +27,56 @@ msgid "" "method to create all types of objects it can create. It is usually named " "``factory`` or ``build``." msgstr "" +"Подобно AbstractFactory, этот паттерн используется для создания ряда " +"связанных или зависимых объектов. Разница между этим шаблоном и Абстрактной " +"Фабрикой заключается в том, что Статическая Фабрика использует только один " +"статический метод, чтобы создать все допустимые типы объектов. Этот метод, " +"обычно, называется ``factory`` или ``build``." #: ../../Creational/StaticFactory/README.rst:14 msgid "Examples" -msgstr "" +msgstr "Примеры" #: ../../Creational/StaticFactory/README.rst:16 msgid "" "Zend Framework: ``Zend_Cache_Backend`` or ``_Frontend`` use a factory method" " create cache backends or frontends" msgstr "" +"Zend Framework: ``Zend_Cache_Backend`` или ``_Frontend`` использует " +"фабричный метод для создания cache backends или frontends" #: ../../Creational/StaticFactory/README.rst:20 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Creational/StaticFactory/README.rst:27 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Creational/StaticFactory/README.rst:29 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Creational/StaticFactory/README.rst:31 msgid "StaticFactory.php" -msgstr "" +msgstr "StaticFactory.php" #: ../../Creational/StaticFactory/README.rst:37 msgid "FormatterInterface.php" -msgstr "" +msgstr "FormatterInterface.php" #: ../../Creational/StaticFactory/README.rst:43 msgid "FormatString.php" -msgstr "" +msgstr "FormatString.php" #: ../../Creational/StaticFactory/README.rst:49 msgid "FormatNumber.php" -msgstr "" +msgstr "FormatNumber.php" #: ../../Creational/StaticFactory/README.rst:56 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../Creational/StaticFactory/README.rst:58 msgid "Tests/StaticFactoryTest.php" -msgstr "" +msgstr "Tests/StaticFactoryTest.php" diff --git a/locale/ru/LC_MESSAGES/More/Delegation/README.po b/locale/ru/LC_MESSAGES/More/Delegation/README.po index 169e8fd..958fd7a 100644 --- a/locale/ru/LC_MESSAGES/More/Delegation/README.po +++ b/locale/ru/LC_MESSAGES/More/Delegation/README.po @@ -1,60 +1,60 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-30 04:46+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../More/Delegation/README.rst:2 msgid "`Delegation`__" -msgstr "" +msgstr "`Делегирование `_ (`Delegation`__)" #: ../../More/Delegation/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../More/Delegation/README.rst:7 ../../More/Delegation/README.rst:12 msgid "..." -msgstr "" +msgstr "Основной шаблон проектирования, в котором объект внешне выражает некоторое поведение, но в реальности передаёт ответственность за выполнение этого поведения связанному объекту. Шаблон делегирования является фундаментальной абстракцией, на основе которой реализованы другие шаблоны - композиция (также называемая агрегацией), примеси (mixins) и аспекты (aspects). (c) wiki" #: ../../More/Delegation/README.rst:10 msgid "Examples" -msgstr "" +msgstr "Примеры" #: ../../More/Delegation/README.rst:15 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../More/Delegation/README.rst:22 msgid "Code" -msgstr "" +msgstr "Код" #: ../../More/Delegation/README.rst:24 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../More/Delegation/README.rst:26 msgid "Usage.php" -msgstr "" +msgstr "Usage.php" #: ../../More/Delegation/README.rst:32 msgid "TeamLead.php" -msgstr "" +msgstr "TeamLead.php" #: ../../More/Delegation/README.rst:38 msgid "JuniorDeveloper.php" -msgstr "" +msgstr "JuniorDeveloper.php" #: ../../More/Delegation/README.rst:45 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../More/Delegation/README.rst:47 msgid "Tests/DelegationTest.php" -msgstr "" +msgstr "Tests/DelegationTest.php" diff --git a/locale/ru/LC_MESSAGES/More/Repository/README.po b/locale/ru/LC_MESSAGES/More/Repository/README.po index e76b302..14748ab 100644 --- a/locale/ru/LC_MESSAGES/More/Repository/README.po +++ b/locale/ru/LC_MESSAGES/More/Repository/README.po @@ -13,7 +13,7 @@ msgstr "" #: ../../More/Repository/README.rst:2 msgid "Repository" -msgstr "Repository" +msgstr "Хранилище (Repository)" #: ../../More/Repository/README.rst:5 msgid "Purpose" diff --git a/locale/ru/LC_MESSAGES/More/ServiceLocator/README.po b/locale/ru/LC_MESSAGES/More/ServiceLocator/README.po index 2d89e95..4031081 100644 --- a/locale/ru/LC_MESSAGES/More/ServiceLocator/README.po +++ b/locale/ru/LC_MESSAGES/More/ServiceLocator/README.po @@ -13,7 +13,7 @@ msgstr "" #: ../../More/ServiceLocator/README.rst:2 msgid "`Service Locator`__" -msgstr "`Локатор Служб`__" +msgstr "Локатор Служб (`Service Locator`__)" #: ../../More/ServiceLocator/README.rst:5 msgid "Purpose" diff --git a/locale/ru/LC_MESSAGES/Structural/README.po b/locale/ru/LC_MESSAGES/Structural/README.po index 928301e..9b82984 100644 --- a/locale/ru/LC_MESSAGES/Structural/README.po +++ b/locale/ru/LC_MESSAGES/Structural/README.po @@ -1,19 +1,21 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-30 23:27+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Structural/README.rst:2 msgid "Structural" msgstr "" +"`Структурные шаблоны проектирования ` (Structural)" #: ../../Structural/README.rst:4 msgid "" @@ -21,3 +23,6 @@ msgid "" " ease the design by identifying a simple way to realize relationships " "between entities." msgstr "" +"При разработке программного обеспечения, Структурные шаблоны проектирования " +"упрощают проектирование путем выявления простого способа реализовать " +"отношения между субъектами." From 2af532c8ee9f77c5dda1903d0c971838596a4c57 Mon Sep 17 00:00:00 2001 From: Victor Date: Mon, 1 Jun 2015 01:05:23 +0300 Subject: [PATCH 036/127] Fix observer attach/detach tests --- Behavioral/Observer/Tests/ObserverTest.php | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/Behavioral/Observer/Tests/ObserverTest.php b/Behavioral/Observer/Tests/ObserverTest.php index 233de28..75490cc 100644 --- a/Behavioral/Observer/Tests/ObserverTest.php +++ b/Behavioral/Observer/Tests/ObserverTest.php @@ -36,11 +36,20 @@ class ObserverTest extends \PHPUnit_Framework_TestCase public function testAttachDetach() { $subject = new User(); - $this->assertAttributeEmpty('observers', $subject); + $reflection = new \ReflectionProperty($subject, 'observers'); + + $reflection->setAccessible(true); + /** @var \SplObjectStorage $observers */ + $observers = $reflection->getValue($subject); + + $this->assertInstanceOf('SplObjectStorage', $observers); + $this->assertFalse($observers->contains($this->observer)); + $subject->attach($this->observer); - $this->assertAttributeNotEmpty('observers', $subject); + $this->assertTrue($observers->contains($this->observer)); + $subject->detach($this->observer); - $this->assertAttributeEmpty('observers', $subject); + $this->assertFalse($observers->contains($this->observer)); } /** From 581b847743f5f6720b190e98058408f645b41a1f Mon Sep 17 00:00:00 2001 From: Victor Date: Mon, 1 Jun 2015 01:20:57 +0300 Subject: [PATCH 037/127] Remove composer.phar and add short installation instruction --- README.md | 10 ++++++++++ composer.phar | Bin 965040 -> 0 bytes 2 files changed, 10 insertions(+) delete mode 100755 composer.phar diff --git a/README.md b/README.md index 55200f4..efe31ac 100755 --- a/README.md +++ b/README.md @@ -9,6 +9,16 @@ This is a collection of known design patterns and some sample code how to implem I think the problem with patterns is that often people do know them but don't know when to apply which. +## Installation +You should look at and run the tests to see what happens in the example. +To do this, you should install dependencies with `Composer` first: + +```bash +$ composer install +``` + +Read more about how to install and use `Composer` on your local machine [here](https://getcomposer.org/doc/00-intro.md#installation-linux-unix-osx). + ## Patterns The patterns can be structured in roughly three different categories. Please click on the [:notebook:](http://en.wikipedia.org/wiki/Software_design_pattern) for a full explanation of the pattern on Wikipedia. diff --git a/composer.phar b/composer.phar deleted file mode 100755 index 49b5aa9fb7cd0d595e70ba5bd2de622f24d113f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 965040 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 AZ!QHvUNrvxy)>~|G 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

rUgU3eRIh!x^5lK<4?$5cI5|<_5V~>*P z?VnxwtE8Bu#|XH^OPW_B5MqCHadpn{a1n+)3>(FVpkpgo(Q-?bU!Oto8s`eAy4XLG zC>UM#xs(?_o7)I-5+PQQNFVK*ybSaAmxuupcsDWDr+b)+j<+;aLo%7DdFQfY z_Tm&X!AuoeTpWN$R%H8$rZOBphvw&RegakX@TRuBJXMbw&K{&I{p za}9!ouG-*Qqw6pV?f)9ds=)#wW*A=-0h>@`T#WGPCfbO%G%VCuB?qU5c6*iAB>7G% zM%6K`Zew5MRcpMZ1~(4faP{z`c7rv(@$R!DO8Z|;T;@!Q&Fuo#4`;h3YBpy;y!Sf( zS`wIlY&=Vcw&yP$?l4vK{zqoO`dFVZrA+*?b^$Jvf583^?gM7k6j_s;?nur#(zmyx z+ys}tgzQfcfwqZ}mpA`cglUM|g-oM9cNS zMj;18s*$x4Rt)cY07iMKwyy9Ep5c^m#{Bkef*;>WkFuV5Z*m$-n<9H~WF7GuZ&vs@ zL-zswd@t*^_|{+JO9>YhlQ4;Da7QDz6jW=aW}?ii3nY6!!YvJK7(`k=;7MCwD8k)~ zrCP3R$^Cd>R|HX0q)N88YO7p8;IFP@1`9o1@;eSzZigYt;84Pd#US7h867LF-e*+M zrX+k3=_u=h%!?2NwRHrNT_R&HB88=Q$}}d*j!+1uzj{kW9TAQj^dP2M!w$4b8Tzt(xWlvI!nHq*o3k`(L;YaS zf>{(v2);bfYDgDKW%=zgPiJoez(1MKqclg)KEp!nRG@S_;nJ!(Ck3Es_LwX&%ZpMC zh9^q!y0LK!onFk!-!gP4iza zfzx1mM46X=-9|dPl7Ug%MfILOM<<3AJpNqGy&ss?@`%r}ZW=91Ppz(a1_+NoQs!~~ z=z!{udaZOoy@t_GmjFY(}$IE~ol|9pYm`@gx<{`S@W+4TJKg!#yw zA9h;JmYLf*U3o6=NP%CKS%FqYulyH9`59Wq)h42X(Mbnc07osA94o$mGHyk!LWSP8MTCfbh2%@chG>z=cN*r!FN1CgJc9 zx(&)GLNBj&kSD$t*s>IBA~}fYHM4&h;cml%@QTdm0jeX9F^G;DZU(QQL=Uo#rWePT zZ`Wp&y0IkIh)>5C7w2nl_ZQOxIS0|OCk1spTU;>cY4WG@6Bui&@KB%w`SvMBEz7a4 z2t}GRr&$&JB^co^Py@ZtEY~b4x)lVTKBUN*C@V7Hym+>S;&z8*K_J znzDld{I!W+i)|(;1=WdP*J3mT*1Zl3M6hqxLaWOE4(OiV8l$3$RdDG%U^CLZv8oNs zf=10sCixwrMm6R_DNoZ6BCk@=!+#0h+Tzva+ZUKMJ?xu;ldvYXHG5?Ajx+I8TwC^K zEy3`GUmVZq-QJ%cF@_OK)5%-79|d`qak*kF0hSlU6CBC?r#luzVEb4Wqr+&6Cc3$i zCvfa*RtCBtP5uP`Cg3^oFK~lJy2ElM-9hH0%!3p<>lnu<(z;a5IMjQ8-aY#%y(R@3 zayiPMd4j!rPbGc#-o^+mScF#A5c}8A0CG2k7Bg4DWQmCXMxX*eBoCSV_=T?Se$Z79 zp2mdUMd|8E?9g~rLH4MM?kRmCoYxp}A$E!SjRmKkA|*dX42-2X_f<8SgIn+q5KasR z@|QDj6+^8Wn~c19^xbm8_wa5h$qwrEeE2!AC(cglW|WLMk`jM0U?nahgoHFAsbnAC z^|{z{;Te!lw)VL;n~VAN#N}C{hg{JjXj(;%tCR|XiU^ME5S;|Jm}Jc7`&VD9?`UU& z7gWeC^rDSXuQ{xkls<-lr=9#bhvP_ZQpvUkM3U)ba!Wq_%fa#K3=e2!+@KA%#h83B z`sANJ`9!E&yjX5DhawZ=CfxrP$YV4QMt`gJif9|#CcE;0hC80V!vTm@9gj&1`2mR? zeTLZ~w$5+da|$!jugu@f6S{qJc{KIdHrqL9*|Q(0i?HtaKM)yNRG+;3>Z{EcPr)dx zho@lgA^fiKPwQ;&Jlp$X>-n?2r!T*K@%-hc)P^s5P3V0%`|*r{1>�$@VC4thPXc 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 NKVBDPt(H0^kJm$W< zlncAm2${nP&UN}l@$6o>*H0x;EeaD|^L}3+(Ib1W5U<4riVClE?{yN{(3N+G&v8sX zIz&ceKgXwPOTx{Az2E_cLS@?vL_7+vL&uY|hnAobF7O&+m9JrJhkSyE z)k;7h3N}@H-7slp0VXYt0i8MhPyW0Os>es+x+@pg43tm?=LQll2`FLgpBqMT#=it| zl!2r--+~?1wYFJK!Q;=zKaM9qjfJv3+jYbnvs2mPAh|6N(Z>Y`cVsM9vDO=(-t4{a z{fq$nX>au=wn#wZ)mL!Ip$yL~DA}*~KRNy6iKgaJL`4MQqImCCcFiH|)9!yy^FVnH zlf^i#jpOVbp)+%%isKG99*as3JbJRfx`EvmiKubQ(>QS6M4%>wb6d4f`&=+(;Hnkv zLtTOmW!X>b9Tc*Mj=YQ<^Ro|GesXP#Dp@||rK}gDOi%X*`vAS~;aRui9wPg8`#&u0 zGNd9+BO9`Zzx-;29;RGbb@LEm6|MkVS)wH2SXo7Mg29shz|*z*NL((fhbaei9m>Qd zBd`yR)uzMf{{rW%Tv>R@Er|cFs;9g%^5dwU*W42Pl z1|0yz9ng^{=h8d!Y@y$gOWPG$w!;#-Dogo}N-)o4+1`=ewrJ07r0oye=~%*{;&c^5 zgean};nGb-WyL3V`=XMGy0nahttb0uGKhOW4&UwRSx>z%80WjNb#nW5(X<4Jw4~ep z!MTwjYef#3bnC8~q*c|KS%fI3q0-qjAnwrE(5l?BXj8dpjusY0cbJz ztP6M*uXWx9!~Q_;oabR^EG(cYc%Kw4`}C4}PL`$oCN3dhnedo;|4tvvK3((UJq2$v z08}RcR$WlpS9{mEOBWZp{X5@W2trl+>rgrOxU>1yM)P0C=I295%_mc*rSnFP^FZUm zBE|Hv-VBcF@a<+s$b!@zzvt(%7PoE&>@rxUK2SU_#&A8BaNYYGKxYxoC7TpKe*^cr zT*bM8paj4c>PbF-1L#5B2C(!b39!-84yhDd;q&~BwYZ{lKU^0{T+Ic>pv7aIfw~ft zd!{b{w8OET0cQ=!tF(Aa%LT{){fNjFdU!HGQ<{=|eo$1IrK3DUbZyJ4=fSE zVx;+rYh{x9@FZgd$v!8}ZF;-X57O$83uvFIS~`e>?v>q#N`R&H?V~ zHLUlCV_ZL)Qs?-~-OoO!m@L80<>b#^t-=BSFW(q|v(Yqlh!l5YNShIU_Z|yNqIyQR+T3)^S-Qkq|d3pul%|$Z4&& zmJ*R3ZByrxb3arNLmO8M9x-TJRs;Gi(D_&f}a?iQu*;-#(@f_H8VlMiQ zM{V`MuHzmg+X>4&jngd6p+=*yR9iv2`J|v>CVi9b%@LanbjCSju3qg93f@$5yS+f(g>1Dn5-hpwg#0FRV>Y+(7Jsk+!nV@b*v7Et z;0_?a+Xum1>LRh5|8tF0gu^nj$N|%dg-DW#=_&G3!5dzBrdMD_VQ(u!8I>-8FtK<) zo48c|)c-kK)-|L}GyJ|+t z1*=bJlIJ$1LE4iBEbdCng%7KDc&{H$I$*4Vb56kN1>{e zdBS5lv+9s-tcv`+y5PH@R;`NV)nWE-82?@+34O+; z{f2VNRrX|a%5g5ITf{}{o@3%kxsNyT1YDSS{GK;2q|ASTiANSrL;Z}yudaG!(hr<; z9GvU^h~M{nTN_W;pRMCPKh8v+B2)X#=fD-87?`|iCXq$b@grqPpX+^r;4?-KrTrJ2 zD;#N?EAsP$=SsVBs#Z?TnPSRG7g120Ib2JU0{`+`_}6r*uIPi*f%H#e2RxiMe^{|| z+ef!e3XuI(*66MFaX(I~yB#)uu3qos*0;2SBGE6l{nG~MTK_t@xd{n-IPH+Q71RN! z38oE~E3y~V1_GVx1aaXuwd35m%9}_RZIt^)CT-g}s9H+j^P8}(p(JH>Rb6n9Bn1xQ z_eD5p3C<#(BVNWb`YLXT#l88<%cmoTaIeZnL$M`zwRfZU#Z9n0?v?KVZHzDSCwdXkB8-Wh3 zCowS5mtMiD<^0@zhTDcurnuuSt^FMbyx{lOhfnwJZ*Fhd#55;b!+R{S-p>K{VDr(V z&A;z$egF8;!zX_QNN_+}x&jkA$TK#Mg#Wv|P&m-Lv9`Cyw1Z$bUADG)kFKsPbhn4j zZ#;Ui_u%2Pt?dODOa=_IO=BErvuDSDinjQ=7u??>G)EnN90Bu;5B<$`HF%?`OWvH! z-stb)9>vU7(N@a~%`MIbfg}SZMx~O{JwLPDCm-%kGE#FbG7U7wOnf3<@ma02f2=r{ zrUE??G{LTW?2@3wgOWr}q|HNx)jzruizbmi1k%M@TPSfp)>2q?uhl4+)w%mn66b3{ zVbv|X`VAd%#y_HLVjq%^%p{J>m&Vzwmg#V5-&>eHTrgA&{Zw{cB9b+3EHRgv1#)C& zg)2mNAD;7yBtpH^`?4vHFT3IT$8U}iXRhix@9rksAjAgbN`B?UWmKiBKGA>iKdKAq zv_eDa&$>`w-{4Luc{dVNXjB>WK1PIcR%C`N^y0(uczEL00-P9kkS2u0-oPDnL5<_w z5w55&u}<_B%JJsfJ8lfdgB*!Pl4%3IR@lBe_hG1758Qdzz@bcO<- z)dk{tGUTTRFC1`jR15|9`bFYEA7P&GP)CET;l0NgnR;B}IPS*BW7D8g!*iQ8vzNDm z)>A1oK~qdm3^=ZQo?ZiZlCfx8odAg1$mvs@$&9L3@-VI$t4%U#y5qGy7)Hdd164!?di8P6Ji^&XA0e{H^d5No9pad0G zo%(1vetr6;%EQItY^ObyuEi?HW{ajaq*}CbM9RpEEfUgas0HK3QaDKx-X_HCTQNof zjEY>=>p;+at9dN$Bav**Ce>yF5QH%IgPewIh7G(IL}X%O*g$9xj0)2(K+u-}jlMcNm8&)8N;3kY zXz>u&U>_~F1M`t8AW>l9GF|XJBU=Cg{}qzBNuU&F63Y~AqBO6emgOibBYKN56a)ko zP9ZLJoe~Hk6Og)CEzbysblMxNScio#kBr5%s<>-nJJ91i3-ekEV$)BlFAbm z&K;W)Nklhn8)rOjAX^jMwp4L~A?X%YTmhe)?Vm2E1#(^prpSi?HHg=cine0YUDDGn z%pgGP`5K%H$+97I<&Q8&)Vj&Wk1y7O72=9sjWX`v5K^wf`He)1q1w=heaol5Wy4S# z)&hv1;7JOeNI4v`fw-Vd<{Bh}$zjLnLv_B4r}E0|O~iAs3{)D{2@;0#vG@gZ8&AAo z!Gg^vsPsiBtkvGr#zgzy{{f(=o36*L=F8z*%)bfq@OIOu>*siuO z$ap}3lG&KfT?gr+*~EqBy*R|3*l$Igi%`5u@mBF`qa>M5PD`L2%s@(Ywu&A>(5ivh zp3GQkdnGF%9BB~Y#uK1}peGq+Q{T;W54`|yJ| zl&igGV%ms@LDh3rBH2q-x|4xMU+_`Q!au%sEQj-^@2022qlZQ+C5U~r^?&tFMrLNQ zh+CrQeCpC%!rdz4)7!Trgb$UBGZpYgx*xPSsjRG5F>bdnVU|qwHKQ(M-GdM`ab8y9 zh{NOHOaR4d@!K$F=vb%dF^_?UIy3#u+^-30Ai`(g@OJ!E=|&3)`a9tv)!XP|F89Fwqci7 z7J0RyN+=2}&}W{gI*%~K!b#KsH+c2Lle%(#Q{{axEp2xhQkOqD>ikn)>oir z#Gszn8mbpqwV>_Xy5bsBx8s}rgln=Z58Lgk4<$;v$L;sbLoGfVm$Fp|K%{upnvTPq zcJ6cYKXA7<^U*ysb5!YvT-+2qoX$on^14@|iIH=35-1_QnRh`1VnQS?Z94;?&7~r` zUgIj(@!*WAIV&2F=G#ce4cZ#PRFY94kCWN#@Wt<)weCHC_G|-pqONc4Jzd}avjn8z zc4E0IGvx6=f{b)9D4(6-Nw=dRTxEK1)-tx_N7J+u-kXdM-@&kuU2)3AJH++*JbHqAA*rwC!-ZY#C7K%Ma*5EbV z!XTKY+=JxSPoauz9Jg@1`!S4xg`4B0M@|2a(o9D^Z3MaBB{7-9?dFaWvb8T){fFni z^0WT-9F%5F@ypN?jKI@CJLdXB%Se6f2Thk4u7O{>A#qTDB5uwC78U*Ik`J7RoJZ$ zHBWVBs?24#VLSv=GRfNCc)9azSo@nHg*jk2B0C!6t(iX0RsH?pllz;0-`e}z#vsi%xpo00if&IQ%d(UWzk285OMIW8dzFMfgd`gK?p>rlQ5Yi&LhW$}%$4?)Kww07?@m8m{^pzaSH5|_^Yxt<-+cRi@Cq~L{d5E$ z{ri_gj@^6e=EJMsvgq||-(JPPOTQao3uK9K@sCg)8%Z3(EWx|O?b53__i;gH|FnlQ z)$jpfTi~F#_{nsUJTd6WdWH?i6FJfYRe1LLsI7M-xa~exCK5vEsO;Q&fx=6;LISo)>7hC-3!lvJ(ojND9hy5n8?{;f~4Tg~6Qer-{eY9zv|K(p5{7=q~ zUJg%k@tG6nW6c|#9y>QzzrvH<*EmO(cYZv2{bKa3h3IQ}!t3NaS_!UO8M$>HRuArzh?YK8Qk zi67;Lbe+|oVqt&tCSGnRZeag$R2R90sQ#kJQC$L18gPzU;C#AvvjOaNE3hWK*In>R zpklb14#L!G%$=N-W?eF^G(`AU*KJY?Ad0%w0rQ{$gGAIO4&IGuU9{klAY@?(T*&-aatbYRhX>45%A<2q zEWbYJMQnd?8B!eP-`D&P9va|J`7ely-?(iLnu>JT6hj2Ju0O#w_QR7S1YhJk*AqRg=?8<+;n_)c zZhQ=C%ycbUySw&pqLEuOHkJp2V-T;#E@8i0d&=Swx6$*}ZJCR%T2vWi*uBlM=yjYDPt6WgT`Uhym6!~Lk|;}&b3 z+>#J!ML>H+| zfry*Y?*V@X3>AM0nN2+%oZ!d~Km$iuUiUY)H|}lk{dME}y?dKa9z1$@Z@btMUYEiJ6qTn<|4?QW*+IR0lmFc^qmy<&(N!NSvKG&?? zHVzYM0Y_Q(i!_NSZ)`r$4@Y?O<-cQJNz;fiyD6JOnnbLB(Vs;0SN-W|J|5Dq^Jp|R z0K}01G+oNxBBr{!|dZ;^!@`ahpFCi533*Ov>)?r^0xFpG7a=AV0tv6WGqNALzKU z=VyGo+duvgKmHg$zUur~yS380l_0DY@IKNP&$B7z*dlzb6=?D+mt6azfP$}_ z2fheY;MZrkF}L6a?ujKfFw&9sC@X~5q_vebVA}fwbI^h?M9M*XJsDfjNCwt(zCy-V ztnxX~5I*sowVTLNW=TmHuHKrkz#4uC17HZ&q)m>QH2NieNL#7e=cuOal9K*#6>0j_ z6ZX>IpT*>|b6<31-CFr0u?oG?6lGNfYbgOBQvwD>&X)~%Oex_>N>!^19%)?S$CMJD zq!jSJ>cme+rs%LFl@K+l0Ewh79M@!MOPEZmU`kR66L-4iku0;wk7dV&MJt#rr4qyk z3#GbXl95Z0OerBsN`XliTiseAYnJeYS%t?P9Z4zRecp-R9~$tOQsO5m1-xQ56ge%! zLU>`y+*)ZFCzh$;AW1vaQ<3kzYYvhONI`+-5XBKvIRI%GS~O`CNsA`01DbO9m>e412p za8!N&a*6O6O`S_ggg}^bVo?m13<}BES-Pn}*5afs0jbm}$cZG_tc6Kwx9YE}ZJun) z1vTJYGxWYtOO$Kk+Rt%_wKoo6j*rhI2E@WA)Dr`b&UEORSj~G#1Q*d*dj_|z9IW=` zKU_;(`0HQYUW5rpl3&n$lUr)$0HSMdb9{I6ac(+g*?rzx55~1sk@a-yzBo{{3%dAD zIpT9po+e#}r%Y0I>D{|itXq-By9)3H`V7as3^PXJPC(*$bpFcMw63$RI`p+Nu(mV>WCh> zlL~BBod|3ZUU(FR%X@=vn=NrJ zE~m?m0@N@AtmwJEMe_!|y)0+J@DQ#h-L*|bw(SgV-6p!{A=8a496Cyk*tWc)C6^vL zHuzTtNaKBG6+i@#c=b5lthZOZ1-Xz)TidxQVVJtfoSD{W8pc7z1!h4Vl2_oTr$4#U zv)f-p^X}4RM5`VBP~W;=m5@ zdX%~FrSA@nm-((BguTayfFMwN?=;6k98Jv4hcTh+XT(b@|)dK=Z}5 z_r!7W>ZeP;9-RZrb6^K1evP2J(+Ogp#0Q7%-rgy0^3$$aTUj0XIE>Jf+I?{Ea?&8z)~=G9Z|{y# zo&IymI*_#-kLjDqPfsV)5k(O$yF>*kPcHMZ&L&MQY;5ap94u~%`&jGohsO%c{7M@~j!PpFZ zwhD8m#C8!c(mX6Dg!345^2q@4;xG-UaAk81D57<1MeK?V>NnY)0CjyfFZ8L=#XDPK zq*EW+lOKm;$-hEwc<1{oQ5LnxPNN<-(Jiz0W`J<`13w`HZ3Vp4 z+$rg%$>5JN%GF{-jbVLN{)oZSX~U4c8)loa z7@z$Nwubgn6E9*WxxtVEj$17bg+9Y1u>#p7DcBTOD+Ala!U!r=MQe?Vg#rt~gq4~t zxNn-GY9<$(+?8p6TLm|65A7*{Y43P4osOt62d9wbupPndkf}BX*D1T{_oN zELvehNqE`XZBkyzq{H`u46dAt5!M`Cc*I*U67SpWFf$~8uoNy1R_|bzMH4?1GnAlJ z3l>l_pL5_!#WbKIOaAMpv&g9+zwojUM>z1x>MBK@+t@|_s!oB@jj5p|_|*e?HEi&f zjF&D)d`gD>tQ}{ZZK+wEWK<@ixr2aU4`btcKcX{B-h95$|rfp z2fgXP!XZKIvDdmmN4Eg1i&Fw#CS*$LwW}|7B7_%IBG9Q9gtrDLxf+2eR{OZs@JJP* z(MfSA#nWuO3`WB2qA(L~84#r=mxVrdh#ka1jdfYB(Z0e+LAa|fk{?uB`a?CXFS{_h zNek$(rBCY=R*gD;PU7uLDI$Tq>P`+`eyF86I>N;|eUDw-OL{a>!W6cmU2J$$r?!@g zk|gqF5;ZnTB89AgFdhnob+?hv)SrTGVLM5>x_S$f!D@6D!i-5sgwA=RDX?DW;b)kK zPQH9Rt4_hzdE>I5XxqVh$Ee|@)i?AQ&9ZPpNi(1LShL4qq??2g6&m=-eHkVKgpDY# zDp&_Q?)`#^+`M)@_Dn6@^UQn zhh`yj)WlL>vT0vXS_*ltJ1MEZlDq`dSO74Y);x7Ob6vs0OEs&MlFlIf0>H z1sHUzLB;}0sBMP!pS}~B9w5OClrhBpvbbb+Pu604a@VZRAVJ^-N>#kNdZ!yCT@M9% ze{7;xkcB6omau&I0OY7bd=07o?cduq2W{bI>Z8)bexaX`z^iwDAtt{T%VapFxn3Lo zcFu<2K3Keec6>P6r`HvTh({-&s6#PJ1gj$=P2_IEw8hz-moNv8<2^jTOV2%|?7@U) zWy<-hjwgo|RzGet#v&kPO0{d(C~a&->CV~An=%@?3gB@~?tGF!A)TtGVkqz@Tc!n* zA*!ueu;!Od*3=1DPqD9>1tVw?84>cWo6QQ%sa?H>XF3 zdx$?Aoxa;Ufaix!xZnTo=l=Eb5^$#j_9LOx`*=0_djC&Y-(oYk|9tzw>X&k+nI>z4 z(%E1ghfO%K=P;bYCwo&!0qg_@t5HB>ZE~ykDQ>ry*$~au_L^>W11qeT#+*W0Nln=H zN}6ZwNu{=4V0A6=*~+oPhZ0S0t8U4bH53=kx;0cDZY5Kzq!peA1Q!DWN0;|df|46O zAyp2YfKo<`PG2tMlm`79+nwNVn2;|gys%?&_veiVyFcH(i~l_Ud#Lqg*T~DRtq=xY zK)IkDmEux_ib8#&i`Y)>9Sl$9-jegzh%*mdAy2fL2gUciGkJgAP-{fB1< z^o2hkkH~VpyRh?CH%|`Wn0P!m`4JlzCYdmV-0QtaptkG_Yee=Vx;oHZr%B#5O(`d5 zxR~1+V|hU$jruomF~PMPeFV319}1tV-!AiT^^5mAYxuAHymobY_qzQ;?r`J9&b8GS z-+IdKOV+<7^?&(cQTI#cnbq%ie%QUay8H9ZukgPCeyqKsxLJI0_0vUct}IB51F`#s zz-9BEU%&E8A`ker!!HT24ilZiI8%01)(}C zpRIhp@`sf#R{ps1<;qtphy`C`#2AB@Ru&e8k@)JiRAV2|cvt&dRouKVWeAEtf-fa} z9$@1le2M@Z^01Rd9O&K?O6Y?Uuu0V!U8KNM5Wm$k7ix$H&OxLlW0Ez&E#a5`T+Dxv z#DmK!SBKRr7&yYL8z(tZ!z8CpUDy^zE=wk{Fl%htVTmMJBhl%C3@euWgbaC5`K;@_ zT*RndCE!z{CbUjsEE!njsmSOXZ^>&E4xO&fT%vN4A#SJXp`v2TPAu{%i%ClGIWZE% z%?{~`2<18^rQCIcJfde2=)eZyv7EyJbRU&G8sP4iB3Eg97I-jQX`KSm4m*&`+ntGDadVP(Uwj%7J|X|1vdH2*D*N;}q7e~CFK7BDxe z3(C6f?hUiR)!x@=SX7^s$HuBRsvVNqAsq#Nxl>YCv9YP>)tF=D*@e_iZLQf&?a}3Y zSNX`J+^A*Lso$bu%VOeC#27g^quJ|Hj$r$b=%^?P{ST&ri30b-nV}CltII=$Xa2;L z${&=YR2EvaXog}Zw35U|5DPMbsO@jTxPs5q>YiTP_l%mK@^DFtJc=$gNkJAvRX~i< zH#h$T2?!=gW%+&W8gU^R#GfWDJLLqzjuz*0)7dp_tP;W?a_v374TZOK#@9cEBDGKn zcqH&ss6uR=Jo-c26*6L400>!6liebmdl~-~(^xcJEBxNI1V)Amq*G%dVNU%l zK@*-2atDDmBTE?8O@aguqWLvg(Itt3Ql{ld8t67v>T1`;MVMt-=sT8SbtFlMH(}(5 zXR{@)K7ffeS^A_ilP2X;>Q<+>B2nfs7!G|=nIUVOC@z>FlFI~0%hDXYsFh{ltl#kT zE-rQo9;aOJ+b{HC>%)_D*y^`(!joaf6AP8Oj@1YE3SW=$E)ODfF!tA>gsJvHsm(nt(VyZ>&%i(Jr4Ck3#HI>6UIi-n}qYjdk)(%Y< z+^5BPVqIn<$K_LkA#gkJf}SshB@||<3KAHuTxA4PiXvR>IhJ{39c&efr0m0y(?*$! zQwMJ+qXTR+?D0_Y9t6kXXv$NAVBGJ&-`m<=f3_{O`~G|U-rgX`dwSR!>4HLr6E_R| zS<$}*N0s&Zi{x&Sa@eh~UMEddPFPJwTzHyUkW3H?tMv3ZP`>+22NL}6*38-;EeTF` zPx{i5;6}HkTYONO6|<+G7eq-C+|XVMhlwQ#?mtiBmDH>VN1ua-EiOrG=)0$Rv9(M9 z$6^g#_hR1WTJ8Xh@V~7;dUzjBu!}C=b>(g`LpcN-vlC}vr{S^>@M7M}TY~Qav0L(# zLuITM_XSuq8-~LwfJNNZKxeX52rd+sY%EhqaEzD?%_d3$<{ zML~}z%C~Sm-_Zcv!UO0zVfXpT2$wcv(+#KmPp14#U+E%@KebhgB>`6dlxKZ?$kJP>bGfd&7+8=^40yu%7{7{a-SVp>u+4%2i zbXYD`;*$r8LKAvY`X@@}<)sWHNQ96YdQnrTffL4zs#NaO;~S%jdL)oJAVpAP&0lm$ zbaNOTWoq>0>}2d@h_C`?M&-sBre02ki6f!IKoV!YrrS8{j%{bbg8BJAc`aK4Z1mc- zSQ;Eg09W8n-J8e(e=KsOIqB@`YFSwOBe=5~`A=P&i3J!-ex+xTnhFUIARH*^aw!aX z&Qw}Bm8{#sU(KF#oarLQ(qcG3;ID=hF82oqs{99s4-qvyh4~+no~B1pnQp?6KM_-m zvR5@~-Znm;K!A{B#sG$nfk60a!U^+Ic1l?x4vr2zk!+%QFq&eKGWn?$4%6IZ^VOCNBfUEqiY}1}6sf79H2VA(W~B)IN=P%S9w4SEJ7#5` zwSQt|l&X+D8<#VPutjor4|!@TixE1Gmk@NMXUxi(Mua4b+9Pp(EemQj9d&lFI?iVi zxy>%4r_GkvAC6mWPh9kdGeS5TF+QbzUD=_@MDM(DyW0v?QCWNFkC zHBz?L-F$VqdfVt8gr!V_G<4Pw{vo1iW;6%hF>i&EhrF8s{0ygSLcv2=z-S|^C3<*1 zl6D?6S)mGy<|It=LYQQW<0`K{uXFWb&P-4{Cusf^GP`QQIgIaztG}o1y^;UJvh(+6p9?H8PFvL`WDLM2rTmGce{VO9KP}1iz0BLSuxsV(tt+ z@*zrhj<*lE-fVX65iiDe2-pq$Hjp?ET;%iSK995dyh%EX>)}$R0FCFCeL!tRA&8q) zbc(kXNsQobnY2)LJfWssY^Cv7z2nVrR$DWb4eBLmZX`|HXpUBtm&^+tnXE~DWO`f4 zTCC*g-!QXUs#gSPfPqGGzH-|!vz7L;;EKyoA`? z{=vectZbI&18RZ{uudge)Z`l`vK?xqki@BEo?vwdII{_7xL3pPMXDzMUKH63%SD5z zXLVFN!V+18I2bv)Ehs`6!iA)-bEjdLg)5Lbg0SI%O}^fNv(9bk`S4sZhG=glv?FXp zm6AC~$Hqq9bW+hX4cKv7p2 zN6|qQ=NN`WY;w3ilLM>C$+32x;9)TdleycJIET#+pjw(e!WZBcN-LNK@HMVbO6~jl-7(Mu$k9BLf6dIr{@9=_hUWiwa1$X|6bwpi&wl zQ?Cc-wGbjIdcey>MVby~AQh&=fWB0dhKYV2ga_q$GF#uY(3k*~#sd1I(3p@)8j}^A zEEu>8)0U*P9a(ZW!Cj8br#;*?j72yj6;(*g7Q=z2-5N?9+d3*3$E5MqvW1%0NQ~jZ zmMD5EK1MzU&>g(o94=`|hD+Pza8)`rw;HU17Hud1nxiz6>oo$-l$-TNPPQy8H9C%$ z9r66xa?Y@rZn#I`4a1sW(TkRc7*@h6WfOApPtNLFC7({yWxXNT+6q{Bw1!e+p>Nve zodz|D?q5jPi_=NBSkK7e&o~E{J@tKSTVxc>0PRMl==Mdd6Z4VGc^7EZSJrwr@7Hv@M=nX3_7 zpSX!rtd)|ZC}SiP$Kj0GQ#Y3{=PyO0DE}EszinNPG)N#iglzj;{jyBsQ7Y~UYl=oo z`UZO;wWO5oyz9~??`#|JKZ)GNdQyS$Re3Q1+)n@yDnwNw-%P zri41RAXi#nvHI(=6JZROIbHu(t0rIt}M!=J-T~N zj|s@ZAS_q8lb~Fe$in?G&J$7RA`ok23Hwm zV%;59X{6?e9+oo#5Li-tnGp7?f5z$R$MQE~6A)zvjly3R_>Z1xL_ruG_X+|IF+$Ed230z8J|B*WgDjSTnj zp!eZ8u-p84!i*4Ty3xlkoreE(ePZI!yy18n%Xf8W?y3&;eUb|)6LN*ARk7VgQewVz zS~hhf(C-Y_(T9?GAL{>U?^>7JI+C+1Rr$kL$e&}HUVt($k}R)nIwdVcf)c#E6$sj^ zkXjT-fFxEVzy(N2%v$>fsY>1<|MM()ggij<4Eet9p3Av`ASEkyYO!k(IA^A(r>Cd8 zr>Ccf5OcObsHGyKKVa;&c5}xp(#aN8fMDO46QLZ~yBuEV)D+B9fk#QL3`BiFSaIFY z)V{~pN#_KPGu$boJTdd`)?A_TOf7~jy@dB8jIi@?rMwfpw>a0!^rmA?4cfdKt&yqvQ0cDZ;aHNT^GOUfioP7rv9O-E$w#56tR zfOJOJrc4SPmvm@yc)~hk&f%2ym`cGrVKkvt*KT=78IS=0IpWz43-Z*#FEnk*hlTH_noHD34QCl6)MwEDB`Tl>jKWw5)(MfKukN122VK)C(6dtv6Zz_ z%vNa+_N~||g-(vGLaTRRD+683R{HWrwlV}#KLa z2|*u>6cStJ_=Ty8wQ<4F=p!qmbtK8dDdZfP{PM^J@8nK9DS6f6<-r*J_E3Bep!^kd z2v$>NrLf?FJUfzeKPc8Y99Qoz$sOwaM{=Nc`^O9wtV&9*d8BnQpv(y(8d6T*P<$*# zuprB&BKbhR;DK)`T3n$uB?i)^^v`ki8j>R<=Z7@LC1;uM*z6LHusyL?a!T7?@vvfP z1wF?|2eE^XObhwqxK67KK60QJz;_iqe79IMGL5JQJ*}9+<89TWz+v*}@VFt}Oz&l? zY)hzqse8lcLaBV49}9Ld^ziI^cKfIhHC#q!0e09I?d7%M;eUw-Su2 zcDPcDB>WxUwWVJ;d0j!kixtL7j%To$Vt^}oaaPG-77P4Ji;*)roJj5u_d^6o0%vSN zNK>C1=KaBy++-4PcUC3cUGU98FM?PaIZRB`h^8Bm)8ghnwK3AOqJ0PwMObFip1b|j zmdO}9TbMkd`!pSZ5(ZXXqnz~4!(@#JCwiAk*;r3xBwa%XPEAeN$Xl6aE-OW)F%nR8yci?BcC=tm{M1k*O zHi~1_WPi`muqe8xgqarPb8 z@|c`?3B@w!+JwFkH;Of=W8?=~nB5w5)%})om>TYtY)skX=$uxjy|AMfA#qnn8=d>3 zW1h_p?$d^Qrhe4?F$D}sT|ypZV^jt&%l(i$RzwI5GD-!}9}_D$cbC7ug&K#SYzuC) zHGnKAWY)Hr9biH;4ZLLy^CnWre)|xEdh4}7<`fZjUsFfeT`y*^zQfU@qsv4+oPp{I z?~IY7E#s200Gnt&LL{@|p$YB`g6H)-@apsW>hIf|+iUgq)^>BVwt*A=q5M^J4m$Nh zhXqi))gRR=RMI@MrgY?~H5h(~KFT!?fK0ZKec5`kQ*W=JW_QzRG1{z$>3k5y0dG zfIB#o=M>lQSWldL8Ix@n9Z_j-5nM4&5DH#0X)II0@YYS(0dPutTn+kvzVf^E3TGkN z-EOwp&HA&wjapL&uYk+F^a?Ps4eP9U*Pt8Q+$5o4qsh%u6m~tOT%H`6Rd$XJ=!jh> zl937Oxm1^D!)?up!}@zi~8U3io52L(dl0|?6bxQfI)$OOwv#$ro{as&*NpOYYe zfRT^90CwjcRAf)^M^;q^CGd0%AX2#Lk&R@0+QYPMnImqe`4p#8r&2)4=;B&Y3V31t zA!t&B3i|FO$}Q;>lv9B|?&4VHiQ9wTf9X@=Y%UvdSnHmwaUq$bCp;rC5OEB4c zjJX5#tLXQZY!rMDY3M-xD*9b?QkBxH$kFZ>07Wxg0sSKSTqe!j7S`>AzL36n!0vS9E2(L0Ynq6EbgSFeON|m_*qk=Pgk{NPUoWPCJ9_oDB?I0nS9`Wx)_eQ z&yC9*>3se!K@^y_DYhk>)g~00Tjc0pc(kw&pGQF_M#)Gc(;#985`XOr!U^eghhrXR zEa~Ho29?W}qLavd<^_wL$0o6QLc%PQtM%xN>y(eNKzL3BHI1^cp>p0owJC5Oz~daB z*N~CaQ!KhCCS!QxK|p%yBWWDjU9Y_vV@-zMzoI-+dfJ$Ub~tVAp~8(<8Qg?{2bHT# zKeaKswhygrE897)ubG#!m!n&Z(!DVf(+ zNCsKCFOm}2NcH|I%zZb3Rao(zrhzY>j$$N*jpQs774U^12}E!0QAf}4Q8zh_@7tO^ zVSh!tIE^4z=5>2Mg@H378F5%4B^qt_5ohn1iqLbif6OVZR-t&V!VbTqevcjGh91AL zG-pH=5}EP!VLwUC+VGTRMYQ=6^tdUEbd%tdEW;bW&-$Hki!E0DWSW`i^hR>~rR=jJ z_-%06#+~so;$}&R`S5<@tjms%G18=Ob`&uz2m=v;6b+WYJI!_3ieZo>!*qqY#&9c{ zK%C=`px~Tkv4*Fu{&^Tl2*MYO=ZiS=7fE{vF7f<2LwPLJKCV_QA6p{8KSy?Och^0W zt^(!c1wM#t-2T6M1T7M5Ir4^FBh40*3+0z>_O2S ze{QcmuTF)81Dd84f~-0?;^1%b$ZC$+y}_%&@Xf$D7Z(&`Nt4pQ85;-k%Aeha2|2-c z5-c35X=-V#4a`!aJH5+G$qrnpl@+9MMY;9S@O<44UT9&|asbe{GpcZ5nKPi>9eqH@ z`B_~Bb^3NM7auFEszX4G?g_}7h!?Re3+AAK>V>|BU>u2`;VVh_dAQnylnI@U%vavfB)^f`MKpjKw5uq zBA=-!Q9H6@VIBsA>4LFf51(N(zAAV4j<79&?4(i@D1QfA1KuTzR<94ZX}~&yCMb4+ zFnQdMdT)QRv-r<1zreQ@{I~Rlp%>a&NOlm`(SFvf@3e6rOdWUgfJ3d*mbyFL3f@ni zHKq_n$wiEprr^OBPpSvigD&WIF#nVMoloQs|9$k1HATVZ=qtgyU0CCMtayA^Cs0=T5d*j^dBqY-tFRtWNNNV1&G?uQh z+hPgN8G}ZIkjR}B&Yyfn;}@j$*Me3)qZBzf;2%$4Umem^UbsP+Wbk^og`C`wZ3Gp` z1}!}Rt_hitv1`j|A8XQM#TgaCbEf3=`r9L1?}9KPdflDxYA@s)^6x#4)wd!s- z%C~1Fa@p%i+G!5?d5AG>zlT$04ZeNe*5(ULq-%CJHXYcivAf^zV%bq|Hn*FI+TE%z zMAw0V|3i4uP{Bp6R!V=6LE z9{IKq_k0R><00$?bmFMj>q7N=V=oI;E}v^}Hg-2_tw2dhw`tA1);Bei8U%kA@>0mSrA0b#P5Udat#PE8=2GYxn0B>>>@+cqa^eMTkWS

i-%uYR@ed3WefZT&iH%OA;jeFKc)x;B<H{f7i*KUA8)suYjC|}HNtTD^NmLFH)(yIm0_$s~i3toMDi+0m z^HxLQbu@Q~%P;qYbWTwaMY1jTgEWNO4U?4>=n*C)yE-4ES%hU1Nthjy6j}Y%axt-t zw_nD~M54o11>4nl2BjM|1Tmqc@r~I`wjI8>S7EG_O|mG3_gRXCH$rze7D{kGCo(+&B3M1Tj|n?y zaNb$z;(M^OdqeL=QNN8<*ln3^@jFki0sS#&xIZgiN;Q_4feGueP~knz9Ex{~Gp47akDuy!%} z)#{Uf{PbXHUXUj<2cfEhsdxrbAVbs%5D!eqU z=?=|Jd*AO5E=)NG&d(@!ZCly0bVAL-H6A)D9}Pr7Cq2@zLxWG51K{6)^i;&IYIe{N z3U}Neo%>(*m$;Fok$rR&zAtCKexquZ*~I_=H1C(d3UEq7_n}FGUc!xMY#9 zEa{24va*X4oSU`wW__(uYx9(*y3%71-rwu%yQ{&0mPn9?U(SnYKfS!XfThNLg+(z0 zI!nXRi3)s&gk6#Vt`73imKbFN=S5{j2&Z`{KObX>a)A}0c&;b)NM)l9X8tfCsJR!7 z;B==rK@*!|MZx5m86eZk&3UU9kEqbqSJ%_eK+TlZY5y3}rzZc1mNzw{;%bRS4^ThlaQy27ig_=+traCj+-SPeeOCG_ z^;!fPl~QN~0`Rnc=z`)D-jdqkSGp`n=K=x4OgQ-7llCA8wq}`o57#oT+xpC9>XA{7 zsZPZ@D}jrWv9ltVGrHRv!G?CsR{Iy_h7EX2uRaKl;4ApYy_RzU9bexu~ zZ_CfU2)c2Ztv{?%Jd`pJcAaa{Ys~Uu?7~9Bs-Y=RGU83*ri+rZVaM+Gz%D9pmq%Z% zAA#bbxZz(cn$n$%n&Um>5jjX(kZM$Te8x-0pmY5qs1RAGXL7UAQG2E8XcgC#_x63a z(yP=-1(jS^k)8+?$SDvEgXvEha)le$jgJmRB(?!S-N{BmTqQLm{Lw~sJDS}d1&$rb z5&4Sgafai^=X;lWXShwKEl$X4X2O3DusIJnq84~K-WX{T?MSJB=691vIXiu`>J^OQ z?IoYCByAvx0hK2@(TE2j;x`tKWJnf=NK1<47q2w`|9TgdYwqk_6rTGvxfio8#EJrht@(dx8cnUev8ne5~&^B6&t zrCc`{RQ0oE94m2spp^3=`FhZUJ1~WvM<;ljQ0s60Ikh0N4mc3+Zw@-~FaB~IbeI?> zRNR907w4a2RO$GF$=hg~=~A3qsgWBFb51^)v|}~PLgtOAIQv+kaRqYl6O3;NYVTjN zRO%Q$fSW_XTz=vYJ;+thzL z>|U1;28<<{3q;KZPv2X{$iffN>zucRx^FMr8Yin76YG4_g^z95nRotSySOXc!j)(B z7Na;%d!4S_y@Oi-Ye$So(m-F|%L0Gjj2sZ6Di~vD8#@h15DXtp8$+n5z=f;Wst-g% zW93F5SA~w8;2vm}Ix8v~AR$ph!6A|06q9%aV4#S~<6zaLnZHuqf z=SXB_cQ{*Q5%(-|4|KUAM`}JGg3k394L7LfQO@{^IBf9O`N+ZoEr_bfPgxlBL|6^7ZH};{&U8JUq|PV5UrHVDY|2FDgu0ZSUzKH?4g`m zwElntWZ1OHNI;OUduPWhD`}Ci*@0uBF?cQv>mbJVoC_@u-4Vu%df-wbX7`1rX$ajR zy7#dNjy4Wwmu(mp={jGj9{g}`ez|`>=DwTu6JK=GkSuRXLSv3~xA4JB;o!RpG!eAo z;+4dllf-e6k2n@BCGsat9LW|p#qr#mB(Ik*X(_sTH9EVS=*;SqID(G6$ie&6F|Rvm zUO7U0$W+(I9Ykr7l#8{j&K~g?4^MOR&LSkG=yf$17yQOg7J&k}%{@}zA}Ki|zu>SK zUch^Ogd7yBXk>e*rALlrZwIL{iDXfs=k?lJ9b2QCo1?s3v)mSkWD$6qvIe2tkSC(1054x|2SgtECfcK8nMlNB4W z+%k=-j%dW4#%44|*mtXF9)g>UEv-6P!oGTrNo(C0d|;ZZLj;0^7^0k56TvE&rZQy1 zGy}pq_||Mz#6}B|DGYJHr8^^0%CTWM`}ue_d4mvTN@v-!T7qp$=?PO+dSZ$UJEj zYa7pKp3OsNz-LF2y15`M00~?!F2FsK5@K1o;0yZo5wq+*S^fthk6vX{G=X<%s)C`o za~ghecg;H+U%Pk@K13o`9g`22gp~r{7|5NK#4^XXDnS;Kl3|S95OQ6#M787|?IBN` zx7+XzwA&KCBu>gPS6~cgf&&>R`#N11|DCg?i_;4d%6M12d?;D7GQCj)c1!p8%j0jq z{^py9y+_|XeE9AC2S=Sp$6p>EcOE{xfB4|buf&Sp07#q`1XA8|n|s|Gbcdt0KKK5+ z{SjHd>i)LdI00R6x7iJG-ldC$x+ICAr*^_jW%v60csRH|IPhM{gM*#X@Cb_c;6Rq1 zS~38Uo{zQKGM2_HTESiOg`n2^NGLO!1`=-b;L5fP5IJ~w)|&k4D2@|i81xcyl*mQa+Q%5~ zkKKmKBS(PSO$D*9R14bzaE^1WHv$uz6v{3P`F<6La;bJo}^KHrpj!p#&SO#N13qU#NE}`{c~AE|{%9(MmJ*Tr}bM;;bEs znUnq)r}4~XXs8(7qZVbob{% zoH8vEPC+`_z~TLkG7+{nx@C&R9~TSWwPLTR6_ge z=;4{d*27LU`Dva~$%SM50W@F)m%PcBKH=OWJK<2(&A$V>)`E0hPi;@QU z0#55+cg~SIfMI3cKymhAm;*U!i-|hvBfOOe*QnTp(42wu&K6?u;vM(xRQH(7j0vlz z3DC%tf@Uo*f;FmKDO6M_-(Zh`?iaR|0hB5fFv2RNF~D8Z-5$420m#6xP%Z(V^b=O6m(oegiLMLm=M{S6( zh}ucPaD^TxL4B#S0#Spk^ODzrajI$TpkXkvAeu?j z0HQA7QbN_6AV#yen(3}5@kAI!^qyFug!mKd6pzGY=9JlNM7|w^S`JTOL{=_mQLh{v zAEk%K(=Wq*kBUf^EmK0JY_Sr;$m}lTLnm3&9Ei<8q%T1-6SNH50pH#1h8!m-CSjOe=#Am&{hQigjtVH59zQ1~vop(Yo0bEbepcns zNHNE4n@W);2fBn=yt$N>@UoQ9PPz$HB+pBvXDK~{TvpglF6yuB=;g*F(n$pf7tMO7 zbYdk`j5KF-u0gLV|298_ubm2x?Sq1m*h`tDh_^`nCL`Gxq+f8trk{wWRVK|g17kAN z4B?vDS_nP>%fj*tMas9V4U_UT_>w{nHMC-HNAPnvP-+Sn7*Ubaf|#e8iQbhq@VbNChvvnc;61#^1;oKqH+UHWLuDAkf{mM$ z%28Zd=>NbUS%PGZocG2sJN6|A8LOgsEFO4u;T%Y-e3BwEIYmIwW=e4t7cHgaK&+Vn zL=J#?91>9OD=qDdf-~DCj0x6u%BdKYG=rCc;r@W}H)b}?odRxlTKYytP8ZDbFc@j< zIPDf3%xWK+4epn)!L)pN|6?I!d|9Z^c)-EUQg9RlKM`@k><@@w5{FQmF5+sIQ49Ny zhTJqQ7Pnw;nH`j=ej}3%v-5nXy<6L9$h4^(o%JO-M}kl9=yaG=e(a0}$a}Vei!hNW z2d<=Kd^)^3>++KI{@^t{mfhrazavTbRyP_6oQGp%!DDuAfL@S2eBSd@S#mAmzE3u& z59-^vtr)zU@vSdamY0^e^R;|99A1Jv-lr_v_6`?pH0ZWpEo@9f>B+e?<{iXsN4)V5 zfuMNG-a3bw6O$DLi!l~Ur2>2XJ9|>Cbo)^19bB6tSHNN-3lx??VzKk#=(;g@dVMMR zL>*YTyRm_co0VWGvmifn^p%>uNonL957cB42F8kQ_ z?~UeDb+o1PkJi$wTeJj*a@}&%BBJ3tFauxPFmCkEWq>4#iK7qOw2I(r4sjdVbS0Wl z=>;0WS&O*}H4_)0xdRwDz$}S;F&R38DjiUaBozqqX=z=6{NjQiXUu5g;V@ zWVq~4JlcU#V@$xN6*kOZIrj0L{A(wMQ>{U#>2K-3+HL6H=t}S9IvSpzcd)3BLOy2Z zq95Q+MrA}3kNbLY37m1g8t~!F>hR)v)IT}B1Y^x75AQ#CkZkqO#z_tPUT9>nkbFNJ zb^FQF;mJwAGZ@ay?BE4d83hT5$~)r@uM?y?#<7F$0+QnNdK56s7I?zT%!Wy4aGl`R zAq1n~0Qn_$+cEFqi#S5dGbl-+n2d+Vmv49>ne=Ns9v=0vCDKj0L$Ev2W$0BWG;_vD zl`?B~*J{ji{}Z>EA&g_jZbxyi#OpD|iDz#OWhV^q{+p+>6+ZJww#a z1#=rqUwetePRbB<(1u*DBpUO{n^R;KA}X#dDSdneX+J*gb%|Mb2$D&Qe?pcG)?x8u zT!=h;!>%EaLT?2duguJ}@Tzl&y(8(1jyB@AfU1yN20)O|QMFg&Q)~vPDiM_@*TUhE z?+$v$sDBK6zjKC6jS%P%`PptRq5bD|T)(~E`mxrmCyia?Yu^5$u~uKhIfz~SMg;ed zjn?z+y;gz}2%T-cNVeCL+SZHY_l>Q!g{1xmWO&})O}3jejm@2nMjg)@TdNy;YmKdE z$y3zZ+HNHqjm<_2KwH}h8#GXjI_j+_oAo9#TOupu)5b=l^?)pv)a>*x;BMQt!~sBn^+XpHfzs_T{GDRl;#YJDR#+^ z&+B}|_G Date: Mon, 1 Jun 2015 13:03:39 +0800 Subject: [PATCH 038/127] Chinese translation part two finish AbstractFactory & FactoryMethod & SimpleFactory translattion corret word translation & fix some typo error finish Prototype translattion finish Multiton translattion correct words translation --- .../Creational/AbstractFactory/README.po | 4 +++- .../Creational/FactoryMethod/README.po | 16 ++++++++------ .../LC_MESSAGES/Creational/Multiton/README.po | 21 ++++++++++--------- .../Creational/Prototype/README.po | 16 +++++++------- .../Creational/SimpleFactory/README.po | 18 +++++++++------- 5 files changed, 44 insertions(+), 31 deletions(-) diff --git a/locale/zh_CN/LC_MESSAGES/Creational/AbstractFactory/README.po b/locale/zh_CN/LC_MESSAGES/Creational/AbstractFactory/README.po index 803e2fb..990535d 100644 --- a/locale/zh_CN/LC_MESSAGES/Creational/AbstractFactory/README.po +++ b/locale/zh_CN/LC_MESSAGES/Creational/AbstractFactory/README.po @@ -28,7 +28,9 @@ msgid "" "concrete classes. Usually the created classes all implement the same " "interface. The client of the abstract factory does not care about how these " "objects are created, he just knows how they go together." -msgstr "翻译。。。" +msgstr "" +"创建一系列互相关联或依赖的对象时不需要指定将要创建的对象对应的类,因为这些将被创建的对象对应的类都实现了同一个接口。" +"抽象工厂的使用者不需要关心对象的创建过程,它只需要知道这些对象是如何协调工作的。" #: ../../Creational/AbstractFactory/README.rst:13 msgid "UML Diagram" diff --git a/locale/zh_CN/LC_MESSAGES/Creational/FactoryMethod/README.po b/locale/zh_CN/LC_MESSAGES/Creational/FactoryMethod/README.po index b65c56b..7927aad 100644 --- a/locale/zh_CN/LC_MESSAGES/Creational/FactoryMethod/README.po +++ b/locale/zh_CN/LC_MESSAGES/Creational/FactoryMethod/README.po @@ -13,45 +13,49 @@ msgstr "" #: ../../Creational/FactoryMethod/README.rst:2 msgid "`Factory Method`__" -msgstr "" +msgstr "`工厂方法`__" #: ../../Creational/FactoryMethod/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "目的" #: ../../Creational/FactoryMethod/README.rst:7 msgid "" "The good point over the SimpleFactory is you can subclass it to implement " "different ways to create objects" msgstr "" +"比简单工厂模式好的一点是工厂方法可以通过继承实现不同的创建对象的逻辑。" #: ../../Creational/FactoryMethod/README.rst:10 msgid "For simple case, this abstract class could be just an interface" msgstr "" +"举个简单的例子,这些抽象类都仅仅是一个接口" #: ../../Creational/FactoryMethod/README.rst:12 msgid "" "This pattern is a \"real\" Design Pattern because it achieves the " "\"Dependency Inversion Principle\" a.k.a the \"D\" in S.O.L.I.D principles." msgstr "" +"这个模式是一个 \"真正\" 的设计模式,因为它遵循了依赖反转原则(Dependency Inversion Principle) 众所周知这个 \"D\" 代表了真正的面向对象程序设计。" #: ../../Creational/FactoryMethod/README.rst:15 msgid "" "It means the FactoryMethod class depends on abstractions, not concrete " "classes. This is the real trick compared to SimpleFactory or StaticFactory." msgstr "" +"它意味着工厂方法类依赖于类的抽象,而不是具体将被创建的类,这是工厂方法模式与简单工厂模式和静态工厂模式最重要的区别" #: ../../Creational/FactoryMethod/README.rst:20 msgid "UML Diagram" -msgstr "" +msgstr "UML 图" #: ../../Creational/FactoryMethod/README.rst:27 msgid "Code" -msgstr "" +msgstr "代码" #: ../../Creational/FactoryMethod/README.rst:29 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "你可以在 `GitHub`_ 上找到这些代码" #: ../../Creational/FactoryMethod/README.rst:31 msgid "FactoryMethod.php" @@ -83,7 +87,7 @@ msgstr "" #: ../../Creational/FactoryMethod/README.rst:74 msgid "Test" -msgstr "" +msgstr "测试" #: ../../Creational/FactoryMethod/README.rst:76 msgid "Tests/FactoryMethodTest.php" diff --git a/locale/zh_CN/LC_MESSAGES/Creational/Multiton/README.po b/locale/zh_CN/LC_MESSAGES/Creational/Multiton/README.po index 702271d..7ce7048 100644 --- a/locale/zh_CN/LC_MESSAGES/Creational/Multiton/README.po +++ b/locale/zh_CN/LC_MESSAGES/Creational/Multiton/README.po @@ -13,52 +13,53 @@ msgstr "" #: ../../Creational/Multiton/README.rst:2 msgid "Multiton" -msgstr "" +msgstr "多例" #: ../../Creational/Multiton/README.rst:4 msgid "" "**THIS IS CONSIDERED TO BE AN ANTI-PATTERN! FOR BETTER TESTABILITY AND " "MAINTAINABILITY USE DEPENDENCY INJECTION!**" msgstr "" +"**多例模式已经被考虑列入到反模式中!请使用依赖注入获得更好的代码可测试性和可控性!**" #: ../../Creational/Multiton/README.rst:8 msgid "Purpose" -msgstr "" +msgstr "目的" #: ../../Creational/Multiton/README.rst:10 msgid "" "To have only a list of named instances that are used, like a singleton but " "with n instances." -msgstr "" +msgstr "使类仅有一个命名的对象的集合可供使用,像单例模式但是有多个实例。" #: ../../Creational/Multiton/README.rst:14 msgid "Examples" -msgstr "" +msgstr "例子" #: ../../Creational/Multiton/README.rst:16 msgid "2 DB Connectors, e.g. one for MySQL, the other for SQLite" -msgstr "" +msgstr "2 个数据库连接,比如,一个连接MySQL,另一个连接SQLite" #: ../../Creational/Multiton/README.rst:17 msgid "multiple Loggers (one for debug messages, one for errors)" -msgstr "" +msgstr "多个日志记录器(一个记录调试信息,另一个记录错误信息)" #: ../../Creational/Multiton/README.rst:20 msgid "UML Diagram" -msgstr "" +msgstr "UML 图" #: ../../Creational/Multiton/README.rst:27 msgid "Code" -msgstr "" +msgstr "代码" #: ../../Creational/Multiton/README.rst:29 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "你可以在 `GitHub`_ 上找到这些代码" #: ../../Creational/Multiton/README.rst:31 msgid "Multiton.php" msgstr "" #: ../../Creational/Multiton/README.rst:38 -msgid "Test" +msgid "测试" msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Creational/Prototype/README.po b/locale/zh_CN/LC_MESSAGES/Creational/Prototype/README.po index fac09ef..38043e9 100644 --- a/locale/zh_CN/LC_MESSAGES/Creational/Prototype/README.po +++ b/locale/zh_CN/LC_MESSAGES/Creational/Prototype/README.po @@ -13,39 +13,41 @@ msgstr "" #: ../../Creational/Prototype/README.rst:2 msgid "`Prototype`__" -msgstr "" +msgstr "`原型模式`__" #: ../../Creational/Prototype/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "目的" #: ../../Creational/Prototype/README.rst:7 msgid "" "To avoid the cost of creating objects the standard way (new Foo()) and " "instead create a prototype and clone it." msgstr "" +"通过创建一个原型对象,然后复制原型对象来避免通过标准的方式创建大量的对象产生的开销(new Foo())。" #: ../../Creational/Prototype/README.rst:11 msgid "Examples" -msgstr "" +msgstr "例子" #: ../../Creational/Prototype/README.rst:13 msgid "" "Large amounts of data (e.g. create 1,000,000 rows in a database at once via " "a ORM)." msgstr "" +"大量的数据对象(比如通过ORM获取1,000,000行数据库记录然后创建每一条记录对应的对象实体)" #: ../../Creational/Prototype/README.rst:17 msgid "UML Diagram" -msgstr "" +msgstr "UML 图" #: ../../Creational/Prototype/README.rst:24 msgid "Code" -msgstr "" +msgstr "代码" #: ../../Creational/Prototype/README.rst:26 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "你可以在 `GitHub`_ 上找到这些代码" #: ../../Creational/Prototype/README.rst:28 msgid "index.php" @@ -65,4 +67,4 @@ msgstr "" #: ../../Creational/Prototype/README.rst:53 msgid "Test" -msgstr "" +msgstr "测试" diff --git a/locale/zh_CN/LC_MESSAGES/Creational/SimpleFactory/README.po b/locale/zh_CN/LC_MESSAGES/Creational/SimpleFactory/README.po index d011ad6..56221d8 100644 --- a/locale/zh_CN/LC_MESSAGES/Creational/SimpleFactory/README.po +++ b/locale/zh_CN/LC_MESSAGES/Creational/SimpleFactory/README.po @@ -13,39 +13,43 @@ msgstr "" #: ../../Creational/SimpleFactory/README.rst:2 msgid "Simple Factory" -msgstr "" +msgstr "简单工厂" #: ../../Creational/SimpleFactory/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "目的" #: ../../Creational/SimpleFactory/README.rst:7 msgid "ConcreteFactory is a simple factory pattern." -msgstr "" +msgstr "简单的创建对象型工厂模式" #: ../../Creational/SimpleFactory/README.rst:9 msgid "" "It differs from the static factory because it is NOT static and as you know:" " static => global => evil!" msgstr "" +"和静态工厂模式不同,简单工厂是非静态的,正如你了解的那样:" +"静态 => 全局 => 恶魔" #: ../../Creational/SimpleFactory/README.rst:12 msgid "" "Therefore, you can have multiple factories, differently parametrized, you " "can subclass it and you can mock-up it." msgstr "" +"因此,你可以使用该工厂的多个实例,通过传递参数使它们各不相同," +"你可以通过继承扩展工厂来改变工厂的行为,并用它来创建测试时会使用到的模拟对象(mock)" #: ../../Creational/SimpleFactory/README.rst:16 msgid "UML Diagram" -msgstr "" +msgstr "UML 图" #: ../../Creational/SimpleFactory/README.rst:23 msgid "Code" -msgstr "" +msgstr "代码" #: ../../Creational/SimpleFactory/README.rst:25 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "你可以在 `GitHub`_ 上找到这些代码" #: ../../Creational/SimpleFactory/README.rst:27 msgid "ConcreteFactory.php" @@ -65,7 +69,7 @@ msgstr "" #: ../../Creational/SimpleFactory/README.rst:52 msgid "Test" -msgstr "" +msgstr "测试" #: ../../Creational/SimpleFactory/README.rst:54 msgid "Tests/SimpleFactoryTest.php" From a6e49cc0cd280388137a0890c7e7747010aa8ce8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=93=D0=BB?= =?UTF-8?q?=D0=BE=D1=82=D0=BE=D0=B2?= Date: Sun, 31 May 2015 14:58:52 +0300 Subject: [PATCH 039/127] Russian translation part three Adapter Bridge Registry Composite Data Mapper Decorator Dependency Injection Facade Fluent Interface Proxy Registry --- .../LC_MESSAGES/Structural/Adapter/README.po | 44 ++++++++------ .../LC_MESSAGES/Structural/Bridge/README.po | 39 +++++++------ .../Structural/Composite/README.po | 39 ++++++++----- .../Structural/DataMapper/README.po | 45 ++++++++++----- .../Structural/Decorator/README.po | 40 +++++++------ .../Structural/DependencyInjection/README.po | 57 +++++++++++++------ .../LC_MESSAGES/Structural/Facade/README.po | 45 ++++++++++----- .../Structural/FluentInterface/README.po | 32 ++++++----- .../ru/LC_MESSAGES/Structural/Proxy/README.po | 31 ++++++---- .../LC_MESSAGES/Structural/Registry/README.po | 33 ++++++----- 10 files changed, 256 insertions(+), 149 deletions(-) diff --git a/locale/ru/LC_MESSAGES/Structural/Adapter/README.po b/locale/ru/LC_MESSAGES/Structural/Adapter/README.po index b351fc9..a07bbcd 100644 --- a/locale/ru/LC_MESSAGES/Structural/Adapter/README.po +++ b/locale/ru/LC_MESSAGES/Structural/Adapter/README.po @@ -1,23 +1,25 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-31 14:58+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Structural/Adapter/README.rst:2 msgid "`Adapter / Wrapper`__" msgstr "" +"`Адаптер `_ " +"(`Adapter / Wrapper`__)" #: ../../Structural/Adapter/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Structural/Adapter/README.rst:7 msgid "" @@ -26,57 +28,65 @@ msgid "" "incompatible interfaces by providing it's interface to clients while using " "the original interface." msgstr "" +"Привести нестандартный или неудобный интерфейс какого-то класса в " +"интерфейс, совместимый с вашим кодом. Адаптер позволяет классам работать " +"вместе стандартным образом, что обычно не получается из-за несовместимых " +"интерфейсов, предоставляя для этого прослойку с интерфейсом, удобным для " +"клиентов, самостоятельно используя оригинальный интерфейс." #: ../../Structural/Adapter/README.rst:13 msgid "Examples" -msgstr "" +msgstr "Примеры" #: ../../Structural/Adapter/README.rst:15 msgid "DB Client libraries adapter" -msgstr "" +msgstr "Адаптер клиентских библиотек для работы с базами данных" #: ../../Structural/Adapter/README.rst:16 msgid "" "using multiple different webservices and adapters normalize data so that the" " outcome is the same for all" msgstr "" +"нормализовать данные нескольких различных веб-сервисов, в одинаковую " +"структуру, как будто вы работаете со стандартным сервисом (например при " +"работе с API соцсетей)" #: ../../Structural/Adapter/README.rst:20 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Structural/Adapter/README.rst:27 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Structural/Adapter/README.rst:29 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Structural/Adapter/README.rst:31 msgid "PaperBookInterface.php" -msgstr "" +msgstr "PaperBookInterface.php" #: ../../Structural/Adapter/README.rst:37 msgid "Book.php" -msgstr "" +msgstr "Book.php" #: ../../Structural/Adapter/README.rst:43 msgid "EBookAdapter.php" -msgstr "" +msgstr "EBookAdapter.php" #: ../../Structural/Adapter/README.rst:49 msgid "EBookInterface.php" -msgstr "" +msgstr "EBookInterface.php" #: ../../Structural/Adapter/README.rst:55 msgid "Kindle.php" -msgstr "" +msgstr "Kindle.php" #: ../../Structural/Adapter/README.rst:62 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../Structural/Adapter/README.rst:64 msgid "Tests/AdapterTest.php" -msgstr "" +msgstr "Tests/AdapterTest.php" diff --git a/locale/ru/LC_MESSAGES/Structural/Bridge/README.po b/locale/ru/LC_MESSAGES/Structural/Bridge/README.po index a27619b..4c6a9f6 100644 --- a/locale/ru/LC_MESSAGES/Structural/Bridge/README.po +++ b/locale/ru/LC_MESSAGES/Structural/Bridge/README.po @@ -1,78 +1,83 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-06-02 00:24+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Structural/Bridge/README.rst:2 msgid "`Bridge`__" msgstr "" +"`Мост `_ " +"(`Bridge`__)" #: ../../Structural/Bridge/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Structural/Bridge/README.rst:7 msgid "" "Decouple an abstraction from its implementation so that the two can vary " "independently." msgstr "" +"Отделить абстракцию от её реализации так, что они могут изменяться " +"независимо друг от друга." #: ../../Structural/Bridge/README.rst:11 msgid "Sample:" -msgstr "" +msgstr "Пример:" #: ../../Structural/Bridge/README.rst:13 msgid "`Symfony DoctrineBridge `__" msgstr "" +"`Symfony DoctrineBridge `__" #: ../../Structural/Bridge/README.rst:17 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Structural/Bridge/README.rst:24 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Structural/Bridge/README.rst:26 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Structural/Bridge/README.rst:28 msgid "Workshop.php" -msgstr "" +msgstr "Workshop.php" #: ../../Structural/Bridge/README.rst:34 msgid "Assemble.php" -msgstr "" +msgstr "Assemble.php" #: ../../Structural/Bridge/README.rst:40 msgid "Produce.php" -msgstr "" +msgstr "Produce.php" #: ../../Structural/Bridge/README.rst:46 msgid "Vehicle.php" -msgstr "" +msgstr "Vehicle.php" #: ../../Structural/Bridge/README.rst:52 msgid "Motorcycle.php" -msgstr "" +msgstr "Motorcycle.php" #: ../../Structural/Bridge/README.rst:58 msgid "Car.php" -msgstr "" +msgstr "Car.php" #: ../../Structural/Bridge/README.rst:65 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../Structural/Bridge/README.rst:67 msgid "Tests/BridgeTest.php" -msgstr "" +msgstr "Tests/BridgeTest.php" diff --git a/locale/ru/LC_MESSAGES/Structural/Composite/README.po b/locale/ru/LC_MESSAGES/Structural/Composite/README.po index 90ddd21..b5ce0c8 100644 --- a/locale/ru/LC_MESSAGES/Structural/Composite/README.po +++ b/locale/ru/LC_MESSAGES/Structural/Composite/README.po @@ -1,32 +1,36 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-06-02 00:33+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Structural/Composite/README.rst:2 msgid "`Composite`__" msgstr "" +"`Компоновщик `_ (`Composite`__)" #: ../../Structural/Composite/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Structural/Composite/README.rst:7 msgid "" "To treat a group of objects the same way as a single instance of the object." msgstr "" +"Взаимодействие с иерархической группой объектов также, как и с отдельно " +"взятым экземпляром." #: ../../Structural/Composite/README.rst:11 msgid "Examples" -msgstr "" +msgstr "Примеры" #: ../../Structural/Composite/README.rst:13 msgid "" @@ -34,45 +38,50 @@ msgid "" "of the form, when ``render()`` is called, it subsequently runs through all " "its child elements and calls ``render()`` on them" msgstr "" +"Экземпляр класса Form обрабатывает все свои элементы формы, как будто это " +"один экземпляр. И когда вызывается метод ``render()``, он перебирает все " +"дочерние элементы и вызывает их собственный ``render()``." #: ../../Structural/Composite/README.rst:16 msgid "" "``Zend_Config``: a tree of configuration options, each one is a " "``Zend_Config`` object itself" msgstr "" +"``Zend_Config``: дерево вариантов конфигурации, где каждая из конфигураций " +"тоже представляет собой объект ``Zend_Config``" #: ../../Structural/Composite/README.rst:20 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Structural/Composite/README.rst:27 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Structural/Composite/README.rst:29 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Structural/Composite/README.rst:31 msgid "FormElement.php" -msgstr "" +msgstr "FormElement.php" #: ../../Structural/Composite/README.rst:37 msgid "Form.php" -msgstr "" +msgstr "Form.php" #: ../../Structural/Composite/README.rst:43 msgid "InputElement.php" -msgstr "" +msgstr "InputElement.php" #: ../../Structural/Composite/README.rst:49 msgid "TextElement.php" -msgstr "" +msgstr "TextElement.php" #: ../../Structural/Composite/README.rst:56 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../Structural/Composite/README.rst:58 msgid "Tests/CompositeTest.php" -msgstr "" +msgstr "Tests/CompositeTest.php" diff --git a/locale/ru/LC_MESSAGES/Structural/DataMapper/README.po b/locale/ru/LC_MESSAGES/Structural/DataMapper/README.po index 5ccd9a3..be6ab4c 100644 --- a/locale/ru/LC_MESSAGES/Structural/DataMapper/README.po +++ b/locale/ru/LC_MESSAGES/Structural/DataMapper/README.po @@ -1,23 +1,23 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-06-02 00:48+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Structural/DataMapper/README.rst:2 msgid "`Data Mapper`__" -msgstr "" +msgstr "Преобразователь Данных (`Data Mapper`__)" #: ../../Structural/DataMapper/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Structural/DataMapper/README.rst:7 msgid "" @@ -31,47 +31,64 @@ msgid "" "many different domain entity types, dedicated mappers will handle one or a " "few." msgstr "" +"Преобразователь Данных — это паттерн, который выступает в роли посредника " +"для двунаправленной передачи данных между постоянным хранилищем данных " +"(часто, реляционной базы данных) и представления данных в памяти (слой " +"домена, то что уже загружено и используется для логической обработки). Цель " +"паттерна в том, чтобы держать представление данных в памяти и постоянное " +"хранилище данных независимыми друг от друга и от самого преобразователя " +"данных. Слой состоит из одного или более mapper-а (или объектов доступа к " +"данным), отвечающих за передачу данных. Реализации mapper-ов различаются по " +"назначению. Общие mapper-ы могут обрабатывать всевозоможные типы сущностей " +"доменов, а выделенные mapper-ы будет обрабатывать один или несколько " +"конкретных типов." #: ../../Structural/DataMapper/README.rst:17 msgid "" "The key point of this pattern is, unlike Active Record pattern, the data " "model follows Single Responsibility Principle." msgstr "" +"Ключевым моментом этого паттерна, в отличие от Активной Записи (Active " +"Records) является то, что модель данных следует `Принципу Единой " +"Обязанности `_ SOLID." #: ../../Structural/DataMapper/README.rst:21 msgid "Examples" -msgstr "" +msgstr "Примеры" #: ../../Structural/DataMapper/README.rst:23 msgid "" "DB Object Relational Mapper (ORM) : Doctrine2 uses DAO named as " "\"EntityRepository\"" msgstr "" +"DB Object Relational Mapper (ORM) : Doctrine2 использует DAO под названием " +"\"EntityRepository\"" #: ../../Structural/DataMapper/README.rst:27 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Structural/DataMapper/README.rst:34 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Structural/DataMapper/README.rst:36 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Structural/DataMapper/README.rst:38 msgid "User.php" -msgstr "" +msgstr "User.php" #: ../../Structural/DataMapper/README.rst:44 msgid "UserMapper.php" -msgstr "" +msgstr "UserMapper.php" #: ../../Structural/DataMapper/README.rst:51 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../Structural/DataMapper/README.rst:53 msgid "Tests/DataMapperTest.php" -msgstr "" +msgstr "Tests/DataMapperTest.php" diff --git a/locale/ru/LC_MESSAGES/Structural/Decorator/README.po b/locale/ru/LC_MESSAGES/Structural/Decorator/README.po index 0ecf351..de0dc50 100644 --- a/locale/ru/LC_MESSAGES/Structural/Decorator/README.po +++ b/locale/ru/LC_MESSAGES/Structural/Decorator/README.po @@ -1,78 +1,82 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-06-02 00:53+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Structural/Decorator/README.rst:2 msgid "`Decorator`__" msgstr "" +"`Декоратор `_ (`Decorator`__)" #: ../../Structural/Decorator/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Structural/Decorator/README.rst:7 msgid "To dynamically add new functionality to class instances." -msgstr "" +msgstr "Динамически добавляет новую функциональность в экземпляры классов." #: ../../Structural/Decorator/README.rst:10 msgid "Examples" -msgstr "" +msgstr "Примеры" #: ../../Structural/Decorator/README.rst:12 msgid "Zend Framework: decorators for ``Zend_Form_Element`` instances" -msgstr "" +msgstr "Zend Framework: декораторы для экземпляров ``Zend_Form_Element``" #: ../../Structural/Decorator/README.rst:13 msgid "" "Web Service Layer: Decorators JSON and XML for a REST service (in this case," " only one of these should be allowed of course)" msgstr "" +"Web Service Layer: Декораторы JSON и XML для REST сервисов (в этом случае, " +"конечно, только один из них может быть разрешен)." #: ../../Structural/Decorator/README.rst:17 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Structural/Decorator/README.rst:24 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Structural/Decorator/README.rst:26 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Structural/Decorator/README.rst:28 msgid "RendererInterface.php" -msgstr "" +msgstr "RendererInterface.php" #: ../../Structural/Decorator/README.rst:34 msgid "Webservice.php" -msgstr "" +msgstr "Webservice.php" #: ../../Structural/Decorator/README.rst:40 msgid "Decorator.php" -msgstr "" +msgstr "Decorator.php" #: ../../Structural/Decorator/README.rst:46 msgid "RenderInXml.php" -msgstr "" +msgstr "RenderInXml.php" #: ../../Structural/Decorator/README.rst:52 msgid "RenderInJson.php" -msgstr "" +msgstr "RenderInJson.php" #: ../../Structural/Decorator/README.rst:59 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../Structural/Decorator/README.rst:61 msgid "Tests/DecoratorTest.php" -msgstr "" +msgstr "Tests/DecoratorTest.php" diff --git a/locale/ru/LC_MESSAGES/Structural/DependencyInjection/README.po b/locale/ru/LC_MESSAGES/Structural/DependencyInjection/README.po index 0834846..83986ad 100644 --- a/locale/ru/LC_MESSAGES/Structural/DependencyInjection/README.po +++ b/locale/ru/LC_MESSAGES/Structural/DependencyInjection/README.po @@ -1,33 +1,37 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-06-02 01:32+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Structural/DependencyInjection/README.rst:2 msgid "`Dependency Injection`__" msgstr "" +"`Внедрение Зависимости `_ (`Dependency Injection`__)" #: ../../Structural/DependencyInjection/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Structural/DependencyInjection/README.rst:7 msgid "" "To implement a loosely coupled architecture in order to get better testable," " maintainable and extendable code." msgstr "" +"Для реализации слабосвязанной архитектуры. Чтобы получить более " +"тестируемый, сопровождаемый и расширяемый код." #: ../../Structural/DependencyInjection/README.rst:11 msgid "Usage" -msgstr "" +msgstr "Использование" #: ../../Structural/DependencyInjection/README.rst:13 msgid "" @@ -36,6 +40,11 @@ msgid "" " ``Connection``, which is not very good for testing and extending " "``Connection``." msgstr "" +"Объект Configuration внедряется в ``Connection`` и последний получает всё, " +"что ему необходимо из переменной ``$ config``. Без DI, конфигурация будет " +"создана непосредственно в ``Connection``, что не очень хорошо для " +"тестирования и расширения ``Connection``, так как связывает эти классы " +"напрямую." #: ../../Structural/DependencyInjection/README.rst:18 msgid "" @@ -46,10 +55,17 @@ msgid "" " Read more about Inversion of control `here " "`__." msgstr "" +"Обратите внимание, в ``Connection`` мы следуем принципу SOLID `Инверсия " +"Управления `_, " +"запрашивая параметр ``$config``, чтобы реализовать интерфейс " +"``Parameters``. Это отделяет наши компоненты друг от друга. Нас не заботит, " +"из какого источника поступает эта информация о конфигурации, мы заботимся " +"только о том, что ``$config`` должен иметь определенные методы, чтобы мы " +"могли получить эту информацию." #: ../../Structural/DependencyInjection/README.rst:26 msgid "Examples" -msgstr "" +msgstr "Примеры" #: ../../Structural/DependencyInjection/README.rst:28 msgid "" @@ -58,6 +74,10 @@ msgid "" "create a mock object of the configuration and inject that into the " "``Connection`` object" msgstr "" +"The Doctrine2 ORM использует Внедрение Зависимости например для " +"конфигурации, которая внедряется в объект ``Connection``. Для целей " +"тестирования, можно легко создать макет объекта конфигурации и внедрить его " +"в объект ``Connection``, подменив оригинальный." #: ../../Structural/DependencyInjection/README.rst:32 msgid "" @@ -65,43 +85,46 @@ msgid "" "objects via a configuration array and inject them where needed (i.e. in " "Controllers)" msgstr "" +"Symfony and Zend Framework 2 уже содержат контейнеры для DI, которые " +"создают объекты с помощью массива из конфигурации, и внедряют их в случае " +"необходимости (т.е. в Контроллерах)." #: ../../Structural/DependencyInjection/README.rst:37 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Structural/DependencyInjection/README.rst:44 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Structural/DependencyInjection/README.rst:46 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Structural/DependencyInjection/README.rst:48 msgid "AbstractConfig.php" -msgstr "" +msgstr "AbstractConfig.php" #: ../../Structural/DependencyInjection/README.rst:54 msgid "Parameters.php" -msgstr "" +msgstr "Parameters.php" #: ../../Structural/DependencyInjection/README.rst:60 msgid "ArrayConfig.php" -msgstr "" +msgstr "ArrayConfig.php" #: ../../Structural/DependencyInjection/README.rst:66 msgid "Connection.php" -msgstr "" +msgstr "Connection.php" #: ../../Structural/DependencyInjection/README.rst:73 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../Structural/DependencyInjection/README.rst:75 msgid "Tests/DependencyInjectionTest.php" -msgstr "" +msgstr "Tests/DependencyInjectionTest.php" #: ../../Structural/DependencyInjection/README.rst:81 msgid "Tests/config.php" -msgstr "" +msgstr "Tests/config.php" diff --git a/locale/ru/LC_MESSAGES/Structural/Facade/README.po b/locale/ru/LC_MESSAGES/Structural/Facade/README.po index 1d78bf4..5406898 100644 --- a/locale/ru/LC_MESSAGES/Structural/Facade/README.po +++ b/locale/ru/LC_MESSAGES/Structural/Facade/README.po @@ -1,23 +1,25 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-06-02 01:48+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Structural/Facade/README.rst:2 msgid "`Facade`__" msgstr "" +"`Фасад `_ " +"(`Facade`__)" #: ../../Structural/Facade/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Structural/Facade/README.rst:7 msgid "" @@ -25,20 +27,30 @@ msgid "" "of a complex API. It's only a side-effect. The first goal is to reduce " "coupling and follow the Law of Demeter." msgstr "" +"Основная цель паттерна Фасад заключается не в том, чтобы помешать вам " +"прочитать инструкцию комплексной API. Это только побочный эффект. Главная " +"цель всё же состоит в уменьшении связности кода и соблюдении `Закона " +"Деметры `_." #: ../../Structural/Facade/README.rst:11 msgid "" "A Facade is meant to decouple a client and a sub-system by embedding many " "(but sometimes just one) interface, and of course to reduce complexity." msgstr "" +"Фасад предназначен для разделения клиента и подсистемы путем внедрения " +"многих (но иногда только одного) интерфейсов, и, конечно, уменьшения общей " +"сложности." #: ../../Structural/Facade/README.rst:15 msgid "A facade does not forbid you the access to the sub-system" msgstr "" +"Фасад не запрещает прямой доступ к подсистеме. Просто он делает его проще и " +"понятнее." #: ../../Structural/Facade/README.rst:16 msgid "You can (you should) have multiple facades for one sub-system" msgstr "" +"Вы можете (и вам стоило бы) иметь несколько фасадов для одной подсистемы." #: ../../Structural/Facade/README.rst:18 msgid "" @@ -46,6 +58,10 @@ msgid "" "creations for each method, it is not a Facade, it's a Builder or a " "[Abstract\\|Static\\|Simple] Factory [Method]." msgstr "" +"Вот почему хороший фасад не содержит созданий экземпляров классов (``new``) " +"внутри. Если внутри фасада создаются объекты для реализации каждого метода, " +"это не Фасад, это Строитель или [Абстрактная\\|Статическая\\|Простая] " +"Фабрика [или Фабричный Метод]." #: ../../Structural/Facade/README.rst:22 msgid "" @@ -53,35 +69,38 @@ msgid "" "parameters. If you need creation of new instances, use a Factory as " "argument." msgstr "" +"Лучший фасад не содержит ``new`` или конструктора с type-hinted " +"параметрами. Если вам необходимо создавать новые экземпляры классов, в " +"таком случае лучше использовать Фабрику в качестве аргумента." #: ../../Structural/Facade/README.rst:27 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Structural/Facade/README.rst:34 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Structural/Facade/README.rst:36 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Structural/Facade/README.rst:38 msgid "Facade.php" -msgstr "" +msgstr "Facade.php" #: ../../Structural/Facade/README.rst:44 msgid "OsInterface.php" -msgstr "" +msgstr "OsInterface.php" #: ../../Structural/Facade/README.rst:50 msgid "BiosInterface.php" -msgstr "" +msgstr "BiosInterface.php" #: ../../Structural/Facade/README.rst:57 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../Structural/Facade/README.rst:59 msgid "Tests/FacadeTest.php" -msgstr "" +msgstr "Tests/FacadeTest.php" diff --git a/locale/ru/LC_MESSAGES/Structural/FluentInterface/README.po b/locale/ru/LC_MESSAGES/Structural/FluentInterface/README.po index 0e58551..18e0314 100644 --- a/locale/ru/LC_MESSAGES/Structural/FluentInterface/README.po +++ b/locale/ru/LC_MESSAGES/Structural/FluentInterface/README.po @@ -1,66 +1,72 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-06-02 01:50+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Structural/FluentInterface/README.rst:2 msgid "`Fluent Interface`__" msgstr "" +"`Текучий Интерфейс `_ " +"(`Fluent Interface`__)" #: ../../Structural/FluentInterface/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Structural/FluentInterface/README.rst:7 msgid "" "To write code that is easy readable just like sentences in a natural " "language (like English)." msgstr "" +"Писать код, который легко читается, как предложения в естественном языке " +"(вроде русского или английского)." #: ../../Structural/FluentInterface/README.rst:11 msgid "Examples" -msgstr "" +msgstr "Примеры" #: ../../Structural/FluentInterface/README.rst:13 msgid "Doctrine2's QueryBuilder works something like that example class below" -msgstr "" +msgstr "Doctrine2’s QueryBuilder работает примерно также, как пример ниже." #: ../../Structural/FluentInterface/README.rst:15 msgid "PHPUnit uses fluent interfaces to build mock objects" msgstr "" +"PHPUnit использует текучий интерфейс, чтобы создавать макеты объектов." #: ../../Structural/FluentInterface/README.rst:16 msgid "Yii Framework: CDbCommand and CActiveRecord use this pattern, too" msgstr "" +"Yii Framework: CDbCommand и CActiveRecord тоже используют этот паттерн." #: ../../Structural/FluentInterface/README.rst:19 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Structural/FluentInterface/README.rst:26 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Structural/FluentInterface/README.rst:28 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Structural/FluentInterface/README.rst:30 msgid "Sql.php" -msgstr "" +msgstr "Sql.php" #: ../../Structural/FluentInterface/README.rst:37 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../Structural/FluentInterface/README.rst:39 msgid "Tests/FluentInterfaceTest.php" -msgstr "" +msgstr "Tests/FluentInterfaceTest.php" diff --git a/locale/ru/LC_MESSAGES/Structural/Proxy/README.po b/locale/ru/LC_MESSAGES/Structural/Proxy/README.po index 290eacc..203b7b1 100644 --- a/locale/ru/LC_MESSAGES/Structural/Proxy/README.po +++ b/locale/ru/LC_MESSAGES/Structural/Proxy/README.po @@ -1,31 +1,35 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-06-02 01:56+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Structural/Proxy/README.rst:2 msgid "`Proxy`__" msgstr "" +"`Прокси `_ " +"(`Proxy`__)" #: ../../Structural/Proxy/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Structural/Proxy/README.rst:7 msgid "To interface to anything that is expensive or impossible to duplicate." msgstr "" +"Создать интерфейс взаимодействия с любым классом, который трудно или " +"невозможно использовать в оригинальном виде." #: ../../Structural/Proxy/README.rst:10 msgid "Examples" -msgstr "" +msgstr "Примеры" #: ../../Structural/Proxy/README.rst:12 msgid "" @@ -33,27 +37,30 @@ msgid "" "initialization) in them, while the user still works with his own entity " "classes and will never use nor touch the proxies" msgstr "" +"Doctrine2 использует прокси для реализации магии фреймворка (например, для " +"ленивой инициализации), в то время как пользователь работает со своими " +"собственными классами сущностей и никогда не будет использовать прокси." #: ../../Structural/Proxy/README.rst:17 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Structural/Proxy/README.rst:24 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Structural/Proxy/README.rst:26 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Structural/Proxy/README.rst:28 msgid "Record.php" -msgstr "" +msgstr "Record.php" #: ../../Structural/Proxy/README.rst:34 msgid "RecordProxy.php" -msgstr "" +msgstr "RecordProxy.php" #: ../../Structural/Proxy/README.rst:41 msgid "Test" -msgstr "" +msgstr "Тест" diff --git a/locale/ru/LC_MESSAGES/Structural/Registry/README.po b/locale/ru/LC_MESSAGES/Structural/Registry/README.po index 843138c..b7b7fe4 100644 --- a/locale/ru/LC_MESSAGES/Structural/Registry/README.po +++ b/locale/ru/LC_MESSAGES/Structural/Registry/README.po @@ -1,23 +1,23 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-06-02 01:36+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Structural/Registry/README.rst:2 msgid "`Registry`__" -msgstr "" +msgstr "Реестр (Registry)" #: ../../Structural/Registry/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Structural/Registry/README.rst:7 msgid "" @@ -25,43 +25,50 @@ msgid "" "application, is typically implemented using an abstract class with only " "static methods (or using the Singleton pattern)" msgstr "" +"Для реализации централизованного хранения объектов, часто используемых " +"во всем приложении, как правило, реализуется с помощью абстрактного " +"класса с только статическими методами (или с помощью шаблона Singleton)." #: ../../Structural/Registry/README.rst:12 msgid "Examples" -msgstr "" +msgstr "Примеры" #: ../../Structural/Registry/README.rst:14 msgid "" "Zend Framework: ``Zend_Registry`` holds the application's logger object, " "front controller etc." msgstr "" +"Zend Framework: ``Zend_Registry`` содержит объект журналирования " +"приложения (логгер), фронт-контроллер и т.д." #: ../../Structural/Registry/README.rst:16 msgid "" "Yii Framework: ``CWebApplication`` holds all the application components, " "such as ``CWebUser``, ``CUrlManager``, etc." msgstr "" +"Yii Framework: ``CWebApplication`` содержит все компоненты приложения, " +"такие как ``CWebUser``, ``CUrlManager``, и т.д." #: ../../Structural/Registry/README.rst:20 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Structural/Registry/README.rst:27 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Structural/Registry/README.rst:29 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Structural/Registry/README.rst:31 msgid "Registry.php" -msgstr "" +msgstr "Registry.php" #: ../../Structural/Registry/README.rst:38 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../Structural/Registry/README.rst:40 msgid "Tests/RegistryTest.php" -msgstr "" +msgstr "Tests/RegistryTest.php" From 859119b7f6f3b50eb8141ac0c26406e600de68cf Mon Sep 17 00:00:00 2001 From: Leonam Pereira Dias Date: Wed, 17 Jun 2015 19:18:29 -0300 Subject: [PATCH 040/127] README in brazilian portuguese --- locale/pt_BR/LC_MESSAGES/README.po | 33 ++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/locale/pt_BR/LC_MESSAGES/README.po b/locale/pt_BR/LC_MESSAGES/README.po index 3a26db2..ce29298 100644 --- a/locale/pt_BR/LC_MESSAGES/README.po +++ b/locale/pt_BR/LC_MESSAGES/README.po @@ -22,16 +22,23 @@ msgid "" "them from Zend Framework, Symfony2 or Doctrine2 as I'm most familiar with " "this software)." msgstr "" +"Esta é uma coleção de padrões de projetos conhecidos e alguns códigos de exemplo de como" +"implementá-los em PHP. Todo padrão tem uma pequena lista de exemplos (muitos deles" +"vindos do Zend Framework, Symfony2 ou Doctrine2 já que tenho mais familiaridade com" +"eles" #: ../../README.rst:16 msgid "" "I think the problem with patterns is that often people do know them but " "don't know when to apply which." msgstr "" +"Eu acredito que o problema com os padrões é que muitas pessoas os conhecem mas" +"não sabem quando aplicá-los" #: ../../README.rst:20 msgid "Patterns" msgstr "" +"Padrões" #: ../../README.rst:22 msgid "" @@ -39,10 +46,14 @@ msgid "" " click on **the title of every pattern's page** for a full explanation of " "the pattern on Wikipedia." msgstr "" +"Os padrões podem ser estruturados grosseiramente em tres categorias diferentes. Por favor" +"clique no **no título da página de cada padrão** para uma explicação completa do" +"padrão na Wikipedia." #: ../../README.rst:35 msgid "Contribute" msgstr "" +"Contribua" #: ../../README.rst:37 msgid "" @@ -52,18 +63,23 @@ msgid "" "standard`_ using ``./vendor/bin/phpcs -p --standard=PSR2 --ignore=vendor " ".``." msgstr "" +"Por favor, sinta-se a vontade para criar um fork e extender os exemplos existentes ou para criar os seus e" +"envie um pull request com suas alterações! Para manter o código consistente " +"qualidade, por favor, valide seu código usando o `PHP CodeSniffer`_ baseado na `PSR2`_ " +"usando ``./vendor/bin/phpcs -p --standard=PSR2 --ignore=vendor" #: ../../README.rst:44 msgid "License" msgstr "" +"Licença" #: ../../README.rst:46 msgid "(The MIT License)" -msgstr "" +msgstr "(The MIT License)" #: ../../README.rst:48 msgid "Copyright (c) 2014 `Dominik Liebler`_ and `contributors`_" -msgstr "" +msgstr "Copyright (c) 2014 `Dominik Liebler`_ and `contributors`_" #: ../../README.rst:50 msgid "" @@ -74,12 +90,18 @@ msgid "" "sell copies of the Software, and to permit persons to whom the Software is " "furnished to do so, subject to the following conditions:" msgstr "" +"Permissão é dada, sem qualquer cobrança, àquele que obter uma cópia" +" deste software sem restrição, inclusive sem restrições de uso, cópia, modificação, mescla, publicação, distribuição, sublicense, e/ou " +"venda de cópias deste Software, e permitir a quem o Software é " +"fornecido o façam, nas seguintes condições:" #: ../../README.rst:58 msgid "" "The above copyright notice and this permission notice shall be included in " "all copies or substantial portions of the Software." msgstr "" +"O aviso de copyright acima e o aviso de permissão devem ser incluidos em " +"todas as cópias ou porções substanciais deste Software." #: ../../README.rst:61 msgid "" @@ -91,3 +113,10 @@ msgid "" "FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS" " IN THE SOFTWARE." msgstr "" +"THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR " +"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, " +"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE " +"AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER " +"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING " +"FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS" +" IN THE SOFTWARE." From 1f7138cde1f528adcab8a4c7cfd9ab1ef8e055e7 Mon Sep 17 00:00:00 2001 From: suxiaolin Date: Wed, 3 Jun 2015 13:55:59 +0800 Subject: [PATCH 041/127] Chinese translation part three finish Builder translattion finish Pool translattion correct words translation correct words translation correct words translation finish locale/zh_CN/LC_MESSAGES/Structural/README.po translation finish DependencyInjection translation --- .../LC_MESSAGES/Creational/Builder/README.po | 21 ++++++++------ .../LC_MESSAGES/Creational/Pool/README.po | 20 +++++++++---- .../Structural/DependencyInjection/README.po | 28 +++++++++++++------ locale/zh_CN/LC_MESSAGES/Structural/README.po | 4 ++- 4 files changed, 50 insertions(+), 23 deletions(-) diff --git a/locale/zh_CN/LC_MESSAGES/Creational/Builder/README.po b/locale/zh_CN/LC_MESSAGES/Creational/Builder/README.po index 79d4fe3..6345264 100644 --- a/locale/zh_CN/LC_MESSAGES/Creational/Builder/README.po +++ b/locale/zh_CN/LC_MESSAGES/Creational/Builder/README.po @@ -13,53 +13,58 @@ msgstr "" #: ../../Creational/Builder/README.rst:2 msgid "`Builder`__" -msgstr "" +msgstr "生成器模式" #: ../../Creational/Builder/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "目的" #: ../../Creational/Builder/README.rst:7 msgid "Builder is an interface that build parts of a complex object." -msgstr "" +msgstr "生成器的目的是将复杂对象的创建过程(流程)进行抽象,生成器表现为接口的形式。" #: ../../Creational/Builder/README.rst:9 msgid "" "Sometimes, if the builder has a better knowledge of what it builds, this " "interface could be an abstract class with default methods (aka adapter)." msgstr "" +"在特定的情况下,比如如果生成器对将要创建的对象有足够多的了解,那么代表生成器的接口(interface)可以是" +"一个抽象类(也就是说可以有一定的具体实现,就像众所周知的适配器模式)。" #: ../../Creational/Builder/README.rst:12 msgid "" "If you have a complex inheritance tree for objects, it is logical to have a " "complex inheritance tree for builders too." msgstr "" +"如果对象有复杂的继承树,理论上创建对象的生成器也同样具有复杂的继承树。" #: ../../Creational/Builder/README.rst:15 msgid "" "Note: Builders have often a fluent interface, see the mock builder of " "PHPUnit for example." msgstr "" +"提示:生成器通常具有流畅的接口,推荐阅读关于 PHPUnit 的mock生成器获取更好的理解。" #: ../../Creational/Builder/README.rst:19 msgid "Examples" -msgstr "" +msgstr "例子" #: ../../Creational/Builder/README.rst:21 msgid "PHPUnit: Mock Builder" msgstr "" +"PHPUnit: Mock 生成器" #: ../../Creational/Builder/README.rst:24 msgid "UML Diagram" -msgstr "" +msgstr "UML 图" #: ../../Creational/Builder/README.rst:31 msgid "Code" -msgstr "" +msgstr "代码" #: ../../Creational/Builder/README.rst:33 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "你可以在 `GitHub`_ 上找到这些代码" #: ../../Creational/Builder/README.rst:35 msgid "Director.php" @@ -103,7 +108,7 @@ msgstr "" #: ../../Creational/Builder/README.rst:96 msgid "Test" -msgstr "" +msgstr "测试" #: ../../Creational/Builder/README.rst:98 msgid "Tests/DirectorTest.php" diff --git a/locale/zh_CN/LC_MESSAGES/Creational/Pool/README.po b/locale/zh_CN/LC_MESSAGES/Creational/Pool/README.po index 8defedd..7012863 100644 --- a/locale/zh_CN/LC_MESSAGES/Creational/Pool/README.po +++ b/locale/zh_CN/LC_MESSAGES/Creational/Pool/README.po @@ -13,7 +13,7 @@ msgstr "" #: ../../Creational/Pool/README.rst:2 msgid "`Pool`__" -msgstr "" +msgstr "对象池" #: ../../Creational/Pool/README.rst:4 msgid "" @@ -24,6 +24,10 @@ msgid "" "object. When the client has finished, it returns the object, which is a " "specific type of factory object, to the pool rather than destroying it." msgstr "" +"**对象池设计模式** 是创建型设计模式,它会对新创建的对象应用一系列的初始化操作,让对象保持立即可使用的状态" +" - 一个存放对象的 \"池子\" - 而不是对对象进行一次性的的使用(创建并使用,完成之后立即销毁)。对象池的使用者会对对象池发起请求,以期望" +"获取一个对象,并使用获取到的对象进行一系列操作,当使用者对对象的使用完成之后,使用者会将由对象池的对象创建工厂创建的对象返回给对象池,而不是" +"用完之后销毁获取到的对象。" #: ../../Creational/Pool/README.rst:11 msgid "" @@ -34,6 +38,9 @@ msgid "" "creation of the new objects (especially over network) may take variable " "time." msgstr "" +"对象池在某些情况下会带来重要的性能提升,比如耗费资源的对象初始化操作,实例化类的代价很高,但每次实例化的数量较少的情况下。" +"对象池中将被创建的对象会在真正被使用时被提前创建,避免在使用时让使用者浪费对象创建所需的大量时间(比如在对象某些操作需要访问网络资源的情况下)" +"从池子中取得对象的时间是可预测的,但新建一个实例所需的时间是不确定。" #: ../../Creational/Pool/README.rst:18 msgid "" @@ -43,18 +50,21 @@ msgid "" "simple object pooling (that hold no external resources, but only occupy " "memory) may not be efficient and could decrease performance." msgstr "" +"总之,对象池会为你节省宝贵的程序执行时间,比如像数据库连接,socket连接,大量耗费资源的代表数字资源的对象,像字体或者位图。" +"不过,在特定情况下,简单的对象创建池(没有请求外部的资源,仅仅将自身保存在内存中)或许并不会提升效率和性能,这时候,就需要使用者" +"酌情考虑了。" #: ../../Creational/Pool/README.rst:25 msgid "UML Diagram" -msgstr "" +msgstr "UML 图" #: ../../Creational/Pool/README.rst:32 msgid "Code" -msgstr "" +msgstr "代码" #: ../../Creational/Pool/README.rst:34 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "你可以在 `GitHub`_ 上找到这些代码" #: ../../Creational/Pool/README.rst:36 msgid "Pool.php" @@ -70,7 +80,7 @@ msgstr "" #: ../../Creational/Pool/README.rst:55 msgid "Test" -msgstr "" +msgstr "测试" #: ../../Creational/Pool/README.rst:57 msgid "Tests/PoolTest.php" diff --git a/locale/zh_CN/LC_MESSAGES/Structural/DependencyInjection/README.po b/locale/zh_CN/LC_MESSAGES/Structural/DependencyInjection/README.po index 0834846..5111f59 100644 --- a/locale/zh_CN/LC_MESSAGES/Structural/DependencyInjection/README.po +++ b/locale/zh_CN/LC_MESSAGES/Structural/DependencyInjection/README.po @@ -13,21 +13,21 @@ msgstr "" #: ../../Structural/DependencyInjection/README.rst:2 msgid "`Dependency Injection`__" -msgstr "" +msgstr "`依赖注入`__" #: ../../Structural/DependencyInjection/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "目的" #: ../../Structural/DependencyInjection/README.rst:7 msgid "" "To implement a loosely coupled architecture in order to get better testable," " maintainable and extendable code." -msgstr "" +msgstr "实现了松耦合的软件架构,可得到更好的测试,管理和扩展的代码" #: ../../Structural/DependencyInjection/README.rst:11 msgid "Usage" -msgstr "" +msgstr "用例" #: ../../Structural/DependencyInjection/README.rst:13 msgid "" @@ -36,6 +36,8 @@ msgid "" " ``Connection``, which is not very good for testing and extending " "``Connection``." msgstr "" +"通过配置需要注入的依赖,``Connection`` 能从 ``$config`` 中获取到所有它需要的依赖。如果没有" +"依赖注入,``Connection`` 会直接创建它需要的依赖,这样不利于测试和扩展``Connection``。" #: ../../Structural/DependencyInjection/README.rst:18 msgid "" @@ -46,10 +48,14 @@ msgid "" " Read more about Inversion of control `here " "`__." msgstr "" +"注意我们一直在遵循控制反转的设计原则,``Connection`` 通过要求 ``$config`` 实现 ``Parameters`` 的接口。这样就达到了组建间" +"的解耦。我们不需要关心信息的来源,只需要关心 ``$config`` 中一定有方法来获取我们需要的信息。" +"阅读更多的关于控制反转的资料请点" +" `这里`__." #: ../../Structural/DependencyInjection/README.rst:26 msgid "Examples" -msgstr "" +msgstr "例子" #: ../../Structural/DependencyInjection/README.rst:28 msgid "" @@ -58,6 +64,8 @@ msgid "" "create a mock object of the configuration and inject that into the " "``Connection`` object" msgstr "" +"Doctrine2 ORM 使用了依赖注入,它通过配置注入了 ``Connection`` 对象。为了达到方便测试的目的," +"可以很容易的通过配置创建一个mock的``Connection`` 对象。" #: ../../Structural/DependencyInjection/README.rst:32 msgid "" @@ -65,18 +73,20 @@ msgid "" "objects via a configuration array and inject them where needed (i.e. in " "Controllers)" msgstr "" +"Symfony 和 Zend Framework 2 也有了专门的依赖注入容器,用来通过配置数据创建需要的对象" +"(比如在控制器中使用依赖注入容器获取所需的对象)" #: ../../Structural/DependencyInjection/README.rst:37 msgid "UML Diagram" -msgstr "" +msgstr "UML 图" #: ../../Structural/DependencyInjection/README.rst:44 msgid "Code" -msgstr "" +msgstr "代码" #: ../../Structural/DependencyInjection/README.rst:46 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "你可以在 `GitHub`_ 上找到这些代码" #: ../../Structural/DependencyInjection/README.rst:48 msgid "AbstractConfig.php" @@ -96,7 +106,7 @@ msgstr "" #: ../../Structural/DependencyInjection/README.rst:73 msgid "Test" -msgstr "" +msgstr "测试" #: ../../Structural/DependencyInjection/README.rst:75 msgid "Tests/DependencyInjectionTest.php" diff --git a/locale/zh_CN/LC_MESSAGES/Structural/README.po b/locale/zh_CN/LC_MESSAGES/Structural/README.po index 7957330..4014a82 100644 --- a/locale/zh_CN/LC_MESSAGES/Structural/README.po +++ b/locale/zh_CN/LC_MESSAGES/Structural/README.po @@ -13,7 +13,7 @@ msgstr "" #: ../../Structural/README.rst:2 msgid "`Structural`__" -msgstr "" +msgstr "`结构型设计模式`__" #: ../../Structural/README.rst:4 msgid "" @@ -21,3 +21,5 @@ msgid "" " ease the design by identifying a simple way to realize relationships " "between entities." msgstr "" +"在软件工程中,结构型设计模式集是用来抽象真实程序中的对象实体之间的关系,并使" +"这种关系可被描述,概括和具体化。" \ No newline at end of file From 1a6152772d072a39dbf611f80aa8388abba46de3 Mon Sep 17 00:00:00 2001 From: ibandominguez Date: Sat, 20 Jun 2015 20:01:16 +0100 Subject: [PATCH 042/127] add visibility declaration to __construct --- Behavioral/Observer/User.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Behavioral/Observer/User.php b/Behavioral/Observer/User.php index a441038..213f229 100644 --- a/Behavioral/Observer/User.php +++ b/Behavioral/Observer/User.php @@ -24,7 +24,7 @@ class User implements \SplSubject */ protected $observers; - function __construct() + public function __construct() { $this->observers = new \SplObjectStorage(); } From c6ddf5ea95e7d83806d162e3d26abe722c7a641e Mon Sep 17 00:00:00 2001 From: Guido Date: Mon, 22 Jun 2015 09:52:32 -0300 Subject: [PATCH 043/127] Beginning of ptBR translation of More directory --- .../pt_BR/LC_MESSAGES/More/Delegation/README.po | 2 +- locale/pt_BR/LC_MESSAGES/More/README.po | 2 +- .../pt_BR/LC_MESSAGES/More/Repository/README.po | 16 +++++++++++----- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/locale/pt_BR/LC_MESSAGES/More/Delegation/README.po b/locale/pt_BR/LC_MESSAGES/More/Delegation/README.po index 169e8fd..21a201b 100644 --- a/locale/pt_BR/LC_MESSAGES/More/Delegation/README.po +++ b/locale/pt_BR/LC_MESSAGES/More/Delegation/README.po @@ -29,7 +29,7 @@ msgstr "" #: ../../More/Delegation/README.rst:15 msgid "UML Diagram" -msgstr "" +msgstr "Diagrama UML" #: ../../More/Delegation/README.rst:22 msgid "Code" diff --git a/locale/pt_BR/LC_MESSAGES/More/README.po b/locale/pt_BR/LC_MESSAGES/More/README.po index c3585d8..454e09c 100644 --- a/locale/pt_BR/LC_MESSAGES/More/README.po +++ b/locale/pt_BR/LC_MESSAGES/More/README.po @@ -13,4 +13,4 @@ msgstr "" #: ../../More/README.rst:2 msgid "More" -msgstr "" +msgstr "Outros" diff --git a/locale/pt_BR/LC_MESSAGES/More/Repository/README.po b/locale/pt_BR/LC_MESSAGES/More/Repository/README.po index d9ecc90..7439b93 100644 --- a/locale/pt_BR/LC_MESSAGES/More/Repository/README.po +++ b/locale/pt_BR/LC_MESSAGES/More/Repository/README.po @@ -28,10 +28,16 @@ msgid "" "also supports the objective of achieving a clean separation and one-way " "dependency between the domain and data mapping layers." msgstr "" +"Faz a mediação entre o domínio e as camadas de mapeamento de dados usando uma coleção de " +"interfaces para acessar os objetos de domínio. Repositóros encapsulam um conjunto de " +"objetos persistidos em um data store e as operações feitas sobre eles, " +"provendo uma visão mais orientada a objetos da camada de persistência. Repositorio " +"também apóia o objetivo de alcançar uma separação limpa e uma dependencia unidirecional " +"entre o domínio e as camadas de mapeamento de dados." #: ../../More/Repository/README.rst:16 msgid "Examples" -msgstr "" +msgstr "Exemplos" #: ../../More/Repository/README.rst:18 msgid "" @@ -41,19 +47,19 @@ msgstr "" #: ../../More/Repository/README.rst:20 msgid "Laravel Framework" -msgstr "" +msgstr "Framework Laravel" #: ../../More/Repository/README.rst:23 msgid "UML Diagram" -msgstr "" +msgstr "Diagrama UML" #: ../../More/Repository/README.rst:30 msgid "Code" -msgstr "" +msgstr "Código" #: ../../More/Repository/README.rst:32 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Você também pode encontrar esse código no `GitHub`_" #: ../../More/Repository/README.rst:34 msgid "Post.php" From bebba190371a87829a43d04e1ff7e803650dbd45 Mon Sep 17 00:00:00 2001 From: Leonam Dias Date: Fri, 19 Jun 2015 15:29:27 -0300 Subject: [PATCH 044/127] Portuguese translation part two Corrections on brazilian portuguese README Includes corrections on pt_br README like whitespaces etc. Translating Creational README page to pt_br Translating the creational readme to brazilian portuguese changing the header in pt_BR Translating abstract factory to pt_br translating Builder and FactoryMethod for brazilian pt --- .../Creational/AbstractFactory/README.po | 18 ++++++++----- .../LC_MESSAGES/Creational/Builder/README.po | 27 +++++++++++-------- .../Creational/FactoryMethod/README.po | 23 ++++++++++------ locale/pt_BR/LC_MESSAGES/Creational/README.po | 9 +++++-- locale/pt_BR/LC_MESSAGES/README.po | 26 +++++++++--------- 5 files changed, 62 insertions(+), 41 deletions(-) diff --git a/locale/pt_BR/LC_MESSAGES/Creational/AbstractFactory/README.po b/locale/pt_BR/LC_MESSAGES/Creational/AbstractFactory/README.po index 04a383e..fd6e4dd 100644 --- a/locale/pt_BR/LC_MESSAGES/Creational/AbstractFactory/README.po +++ b/locale/pt_BR/LC_MESSAGES/Creational/AbstractFactory/README.po @@ -4,20 +4,21 @@ msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-06-20 12:00-0300\n" +"Last-Translator: Leonam Pereira Dias \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" #: ../../Creational/AbstractFactory/README.rst:2 msgid "`Abstract Factory`__" msgstr "" +"Fábrica de abstração_ (`Abstract Factory`__)" #: ../../Creational/AbstractFactory/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Objetivo" #: ../../Creational/AbstractFactory/README.rst:7 msgid "" @@ -26,18 +27,21 @@ msgid "" "interface. The client of the abstract factory does not care about how these " "objects are created, he just knows how they go together." msgstr "" +"Para a criação de conjunto de objetos relacionados ou dependentes sem especificar suas " +"classes concretas. O cliente da fábrica de abstração não precisa se preocupar como estes " +"objetos são criados, ele só sabe obtê-los." #: ../../Creational/AbstractFactory/README.rst:13 msgid "UML Diagram" -msgstr "" +msgstr "Diagrama UML" #: ../../Creational/AbstractFactory/README.rst:20 msgid "Code" -msgstr "" +msgstr "Código" #: ../../Creational/AbstractFactory/README.rst:22 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Você pode encontrar o código no `Github`_" #: ../../Creational/AbstractFactory/README.rst:24 msgid "AbstractFactory.php" diff --git a/locale/pt_BR/LC_MESSAGES/Creational/Builder/README.po b/locale/pt_BR/LC_MESSAGES/Creational/Builder/README.po index 79d4fe3..4dcdf66 100644 --- a/locale/pt_BR/LC_MESSAGES/Creational/Builder/README.po +++ b/locale/pt_BR/LC_MESSAGES/Creational/Builder/README.po @@ -4,62 +4,67 @@ msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-21 10:54-0300\n" +"Last-Translator: Leonam Pereira Dias \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" #: ../../Creational/Builder/README.rst:2 msgid "`Builder`__" -msgstr "" +msgstr "Construtor (`Builder`__)" #: ../../Creational/Builder/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Objetivo" #: ../../Creational/Builder/README.rst:7 msgid "Builder is an interface that build parts of a complex object." -msgstr "" +msgstr "Contrutor é uma interface que constrói partes de objetos complexos." #: ../../Creational/Builder/README.rst:9 msgid "" "Sometimes, if the builder has a better knowledge of what it builds, this " "interface could be an abstract class with default methods (aka adapter)." msgstr "" +"As vezes, se o construtor tem melhor conhecimento do que ele cria, essa " +"interface pode ser uma classe abstrata com métodos padrão (como o padrão adaptador)." #: ../../Creational/Builder/README.rst:12 msgid "" "If you have a complex inheritance tree for objects, it is logical to have a " "complex inheritance tree for builders too." msgstr "" +"Se você tem uma árvore de herança entre objetos complexa, é lógico que se tenha uma " +"árvore de herança complexa para os construtores também" #: ../../Creational/Builder/README.rst:15 msgid "" "Note: Builders have often a fluent interface, see the mock builder of " "PHPUnit for example." msgstr "" +"Nota: Construtores têm frequentemente, uma interface fluente. Veja o construtor mock do PHPUnit, por exemplo." #: ../../Creational/Builder/README.rst:19 msgid "Examples" -msgstr "" +msgstr "Exemplos" #: ../../Creational/Builder/README.rst:21 msgid "PHPUnit: Mock Builder" -msgstr "" +msgstr "PHPUnit: Contrutor Mock" #: ../../Creational/Builder/README.rst:24 msgid "UML Diagram" -msgstr "" +msgstr "Diagrama UML" #: ../../Creational/Builder/README.rst:31 msgid "Code" -msgstr "" +msgstr "Código" #: ../../Creational/Builder/README.rst:33 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Você pode encontrar esse código no `Github`_" #: ../../Creational/Builder/README.rst:35 msgid "Director.php" diff --git a/locale/pt_BR/LC_MESSAGES/Creational/FactoryMethod/README.po b/locale/pt_BR/LC_MESSAGES/Creational/FactoryMethod/README.po index b65c56b..ddbfdd7 100644 --- a/locale/pt_BR/LC_MESSAGES/Creational/FactoryMethod/README.po +++ b/locale/pt_BR/LC_MESSAGES/Creational/FactoryMethod/README.po @@ -4,54 +4,61 @@ msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-06-21 11:09-0300\n" +"Last-Translator: Leonam Pereira Dias \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" #: ../../Creational/FactoryMethod/README.rst:2 msgid "`Factory Method`__" -msgstr "" +msgstr "Fábrica de Métodos (`Factory Method`__)" #: ../../Creational/FactoryMethod/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Objetivo" #: ../../Creational/FactoryMethod/README.rst:7 msgid "" "The good point over the SimpleFactory is you can subclass it to implement " "different ways to create objects" msgstr "" +"O ponto positivo em relação ao SimpleFactory é que pode-se extender sua implementação " +"de diferentes maneiras para a criação de objetos." #: ../../Creational/FactoryMethod/README.rst:10 msgid "For simple case, this abstract class could be just an interface" msgstr "" +"Para um caso simples, esta classe abstrata pode ser apenas uma interface" #: ../../Creational/FactoryMethod/README.rst:12 msgid "" "This pattern is a \"real\" Design Pattern because it achieves the " "\"Dependency Inversion Principle\" a.k.a the \"D\" in S.O.L.I.D principles." msgstr "" +"Este padrão é um padrão de projetos de software \"real\" já que " +"trata o \"Princípio da inversão de dependências\" o \"D\" nos princípios S.O.L.I.D" #: ../../Creational/FactoryMethod/README.rst:15 msgid "" "It means the FactoryMethod class depends on abstractions, not concrete " "classes. This is the real trick compared to SimpleFactory or StaticFactory." msgstr "" +"Significa que a Fábrica de Método depende de abstrações, não implementação. " +"Este é uma vantagem comparado ao SimpleFactory ou StaticFactory." #: ../../Creational/FactoryMethod/README.rst:20 msgid "UML Diagram" -msgstr "" +msgstr "Diagrama UML" #: ../../Creational/FactoryMethod/README.rst:27 msgid "Code" -msgstr "" +msgstr "Código" #: ../../Creational/FactoryMethod/README.rst:29 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Você pode encontrar este código no `Github`_" #: ../../Creational/FactoryMethod/README.rst:31 msgid "FactoryMethod.php" diff --git a/locale/pt_BR/LC_MESSAGES/Creational/README.po b/locale/pt_BR/LC_MESSAGES/Creational/README.po index 72f543b..4873bcd 100644 --- a/locale/pt_BR/LC_MESSAGES/Creational/README.po +++ b/locale/pt_BR/LC_MESSAGES/Creational/README.po @@ -1,4 +1,4 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" @@ -13,7 +13,7 @@ msgstr "" #: ../../Creational/README.rst:2 msgid "`Creational`__" -msgstr "" +msgstr "`Criacional`__" #: ../../Creational/README.rst:4 msgid "" @@ -23,3 +23,8 @@ msgid "" " design problems or added complexity to the design. Creational design " "patterns solve this problem by somehow controlling this object creation." msgstr "" +"Em engenharia de software, padrões de projeto do tipo criacional são padrões que" +" trabalham com mecanismos de criação de objetos, criando objetos de maneira " +"adequada às situações. A forma básica para criação de objetos pode resultar em" +" problemas de design ou adicionar complexidade ao mesmo. Padrões de Criação " +"resolvem este problema mantendo a criação do objeto sob controle." diff --git a/locale/pt_BR/LC_MESSAGES/README.po b/locale/pt_BR/LC_MESSAGES/README.po index ce29298..a10ea0b 100644 --- a/locale/pt_BR/LC_MESSAGES/README.po +++ b/locale/pt_BR/LC_MESSAGES/README.po @@ -1,15 +1,15 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-06-18 12:00-0300\n" +"Last-Translator: Leonam Pereira Dias \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: pt_BR\n" #: ../../README.rst:5 msgid "DesignPatternsPHP" @@ -22,9 +22,9 @@ msgid "" "them from Zend Framework, Symfony2 or Doctrine2 as I'm most familiar with " "this software)." msgstr "" -"Esta é uma coleção de padrões de projetos conhecidos e alguns códigos de exemplo de como" -"implementá-los em PHP. Todo padrão tem uma pequena lista de exemplos (muitos deles" -"vindos do Zend Framework, Symfony2 ou Doctrine2 já que tenho mais familiaridade com" +"Esta é uma coleção de padrões de projetos conhecidos e alguns códigos de exemplo de como " +"implementá-los em PHP. Todo padrão tem uma pequena lista de exemplos (muitos deles " +"vindos do Zend Framework, Symfony2 ou Doctrine2 já que tenho mais familiaridade com " "eles" #: ../../README.rst:16 @@ -32,7 +32,7 @@ msgid "" "I think the problem with patterns is that often people do know them but " "don't know when to apply which." msgstr "" -"Eu acredito que o problema com os padrões é que muitas pessoas os conhecem mas" +"Eu acredito que o problema com os padrões é que muitas pessoas os conhecem mas " "não sabem quando aplicá-los" #: ../../README.rst:20 @@ -46,8 +46,8 @@ msgid "" " click on **the title of every pattern's page** for a full explanation of " "the pattern on Wikipedia." msgstr "" -"Os padrões podem ser estruturados grosseiramente em tres categorias diferentes. Por favor" -"clique no **no título da página de cada padrão** para uma explicação completa do" +"Os padrões podem ser estruturados grosseiramente em tres categorias diferentes. Por favor " +"clique no **no título da página de cada padrão** para uma explicação completa do " "padrão na Wikipedia." #: ../../README.rst:35 @@ -63,10 +63,10 @@ msgid "" "standard`_ using ``./vendor/bin/phpcs -p --standard=PSR2 --ignore=vendor " ".``." msgstr "" -"Por favor, sinta-se a vontade para criar um fork e extender os exemplos existentes ou para criar os seus e" +"Por favor, sinta-se a vontade para criar um fork e extender os exemplos existentes ou para criar os seus e " "envie um pull request com suas alterações! Para manter o código consistente " -"qualidade, por favor, valide seu código usando o `PHP CodeSniffer`_ baseado na `PSR2`_ " -"usando ``./vendor/bin/phpcs -p --standard=PSR2 --ignore=vendor" +"e com qualidade, por favor, valide seu código usando o `PHP CodeSniffer`_ baseado na `PSR2`_ " +"usando ``./vendor/bin/phpcs -p --standard=PSR2 --ignore=vendor``" #: ../../README.rst:44 msgid "License" From 1450771c59e8d6f407f536779e460cbffb547064 Mon Sep 17 00:00:00 2001 From: Faust Date: Mon, 22 Jun 2015 15:27:59 +0200 Subject: [PATCH 045/127] fix fix fix --- locale/ru/LC_MESSAGES/Behavioral/README.po | 4 ++-- locale/ru/LC_MESSAGES/Creational/README.po | 4 ++-- locale/ru/LC_MESSAGES/Structural/README.po | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/locale/ru/LC_MESSAGES/Behavioral/README.po b/locale/ru/LC_MESSAGES/Behavioral/README.po index 1726bb0..38ef9ce 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/README.po @@ -12,8 +12,8 @@ msgstr "" "Language: ru\n" #: ../../Behavioral/README.rst:2 -msgid "Behavioral" -msgstr "`Поведенческие шаблоны проектирования `_ (Behavioral)" +msgid "`Behavioral`__" +msgstr "`Поведенческие шаблоны проектирования `_ (`Behavioral`__)" #: ../../Behavioral/README.rst:4 msgid "" diff --git a/locale/ru/LC_MESSAGES/Creational/README.po b/locale/ru/LC_MESSAGES/Creational/README.po index 9a8358a..2827f03 100644 --- a/locale/ru/LC_MESSAGES/Creational/README.po +++ b/locale/ru/LC_MESSAGES/Creational/README.po @@ -12,8 +12,8 @@ msgstr "" "Language: ru\n" #: ../../Creational/README.rst:2 -msgid "Creational" -msgstr "Порождающие шаблоны проектирования (Creational)" +msgid "`Creational`__" +msgstr "Порождающие шаблоны проектирования (`Creational`__)" #: ../../Creational/README.rst:4 msgid "" diff --git a/locale/ru/LC_MESSAGES/Structural/README.po b/locale/ru/LC_MESSAGES/Structural/README.po index 9b82984..fc6965f 100644 --- a/locale/ru/LC_MESSAGES/Structural/README.po +++ b/locale/ru/LC_MESSAGES/Structural/README.po @@ -12,10 +12,10 @@ msgstr "" "Language: ru\n" #: ../../Structural/README.rst:2 -msgid "Structural" +msgid "`Structural`__" msgstr "" "`Структурные шаблоны проектирования ` (Structural)" +"Структурные_шаблоны_проектирования>`_ (`Structural`__)" #: ../../Structural/README.rst:4 msgid "" From 473c04f3983d0fd6296c3be769c022e597837564 Mon Sep 17 00:00:00 2001 From: Dmitry Patsura Date: Mon, 6 Jul 2015 19:27:00 +0800 Subject: [PATCH 046/127] Only Zend Framework 1.x has class Zend_Registry --- Structural/Registry/README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Structural/Registry/README.rst b/Structural/Registry/README.rst index 9de8029..8a92604 100644 --- a/Structural/Registry/README.rst +++ b/Structural/Registry/README.rst @@ -11,7 +11,7 @@ static methods (or using the Singleton pattern) Examples -------- -- Zend Framework: ``Zend_Registry`` holds the application's logger +- Zend Framework 1: ``Zend_Registry`` holds the application's logger object, front controller etc. - Yii Framework: ``CWebApplication`` holds all the application components, such as ``CWebUser``, ``CUrlManager``, etc. From 17411e7accbf99b38b7a96ffa7f576a5e96acd68 Mon Sep 17 00:00:00 2001 From: Serghei Iakovlev Date: Fri, 10 Jul 2015 02:28:44 +0300 Subject: [PATCH 047/127] Update Plus.php --- Behavioral/Specification/Plus.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Behavioral/Specification/Plus.php b/Behavioral/Specification/Plus.php index c4ad546..4bbecc1 100644 --- a/Behavioral/Specification/Plus.php +++ b/Behavioral/Specification/Plus.php @@ -11,7 +11,7 @@ class Plus extends AbstractSpecification protected $right; /** - * Creation of a locical AND of two specifications + * Creation of a logical AND of two specifications * * @param SpecificationInterface $left * @param SpecificationInterface $right From 1029f638ffa73d578b172332251c69d4685a1871 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Mo=CC=88ller?= Date: Tue, 14 Jul 2015 10:43:33 -0400 Subject: [PATCH 048/127] Enhancement: Direct builds to container-based infrastructure --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index f7edf14..a2c2dff 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,7 @@ language: php +sudo: false + php: - 5.3 - 5.4 From 56df6d5f0614f682a6fa13519b1f4257b7415ee7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Mo=CC=88ller?= Date: Tue, 14 Jul 2015 10:53:08 -0400 Subject: [PATCH 049/127] Fix: Use phpunit as installed with Composer --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index f7edf14..2aa52c5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,4 +19,4 @@ before_script: - composer install --prefer-source --no-interaction script: - - phpunit + - vendor/bin/phpunit From 7ed1fec4f2c4fa213642544986314a0e70d3ecb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Mo=CC=88ller?= Date: Tue, 14 Jul 2015 10:54:40 -0400 Subject: [PATCH 050/127] Enhancement: Use SVG badge for displaying Travis build status --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index efe31ac..0d9e054 100755 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # DesignPatternsPHP -[![Build Status](https://travis-ci.org/domnikl/DesignPatternsPHP.png?branch=master)](https://travis-ci.org/domnikl/DesignPatternsPHP) +[![Build Status](https://travis-ci.org/domnikl/DesignPatternsPHP.svg?branch=master)](https://travis-ci.org/domnikl/DesignPatternsPHP) [Read the Docs of DesignPatternsPHP](http://designpatternsphp.readthedocs.org) or [Download as PDF/Epub](https://readthedocs.org/projects/designpatternsphp/downloads/) From 63e5bc125ef82bc0cfba4f9cf5fecd47aaa8e236 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Mo=CC=88ller?= Date: Tue, 14 Jul 2015 10:45:21 -0400 Subject: [PATCH 051/127] Enhancement: Cache dependencies installed with Composer between builds --- .travis.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index a2c2dff..567b40f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,6 +16,10 @@ matrix: - php: 7.0 fast_finish: true +cache: + directories: + - $HOME/.composer/cache + before_script: - composer self-update - composer install --prefer-source --no-interaction From 48e6e06495c6f5cddcecd5c2c55f95b3565edd90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Mo=CC=88ller?= Date: Tue, 14 Jul 2015 16:08:26 -0400 Subject: [PATCH 052/127] Fix: Prefer installation from dist, rather than source --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 567b40f..20fe4ef 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,7 +22,7 @@ cache: before_script: - composer self-update - - composer install --prefer-source --no-interaction + - composer install --prefer-dist --no-interaction script: - phpunit From e9428d1d476b2e9b126c70e8fb18fa0a036dd53c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Mo=CC=88ller?= Date: Tue, 14 Jul 2015 10:40:36 -0400 Subject: [PATCH 053/127] Fix: Update composer itself in the before_install section --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 9f10dff..53d81aa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,8 +20,10 @@ cache: directories: - $HOME/.composer/cache -before_script: +before_install: - composer self-update + +before_script: - composer install --prefer-dist --no-interaction script: From a9917412e8d2b0374553ab3f481a318cabb57127 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Mo=CC=88ller?= Date: Tue, 14 Jul 2015 10:42:11 -0400 Subject: [PATCH 054/127] Fix: Install dependencies in install section --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 53d81aa..3d667d8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,7 +23,7 @@ cache: before_install: - composer self-update -before_script: +install: - composer install --prefer-dist --no-interaction script: From c60ac4372e76c3012c7c9cf4dc2c863ddb728d76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Mo=CC=88ller?= Date: Tue, 14 Jul 2015 10:48:02 -0400 Subject: [PATCH 055/127] Enhancement: Validate composer.json and composer.lock on Travis --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 3d667d8..9f379f8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,7 +22,8 @@ cache: before_install: - composer self-update - + - composer validate + install: - composer install --prefer-dist --no-interaction From 9a66be2ea1a5f1b63c02b1a167d39ff4c4bb8052 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20Mo=CC=88ller?= Date: Wed, 15 Jul 2015 10:25:10 -0400 Subject: [PATCH 056/127] Fix: Run composer update to update the lock file, too --- composer.lock | 798 +++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 666 insertions(+), 132 deletions(-) diff --git a/composer.lock b/composer.lock index 3d44d0c..a9fa4ad 100644 --- a/composer.lock +++ b/composer.lock @@ -1,55 +1,218 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file" - ], - "hash": "5fb4edd1df6d1229395f973b68675bfe", - "packages": [ - + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" ], + "hash": "fd9fc5e6da0104ab5a4bd03fcf53f73a", + "packages": [], "packages-dev": [ { - "name": "phpunit/php-code-coverage", - "version": "1.2.13", + "name": "doctrine/instantiator", + "version": "1.0.5", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "466e7cd2554b4e264c9e3f31216d25ac0e5f3d94" + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/466e7cd2554b4e264c9e3f31216d25ac0e5f3d94", - "reference": "466e7cd2554b4e264c9e3f31216d25ac0e5f3d94", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", "shasum": "" }, "require": { - "php": ">=5.3.3", - "phpunit/php-file-iterator": ">=1.3.0@stable", - "phpunit/php-text-template": ">=1.1.1@stable", - "phpunit/php-token-stream": ">=1.1.3@stable" + "php": ">=5.3,<8.0-DEV" }, "require-dev": { - "phpunit/phpunit": "3.7.*@dev" - }, - "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.0.5" + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2015-06-14 21:17:01" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8", + "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "dflydev/markdown": "~1.0", + "erusev/parsedown": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "mike.vanriel@naenius.com" + } + ], + "time": "2015-02-03 12:10:50" + }, + { + "name": "phpspec/prophecy", + "version": "v1.4.1", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373", + "reference": "3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "phpdocumentor/reflection-docblock": "~2.0", + "sebastian/comparator": "~1.1" + }, + "require-dev": { + "phpspec/phpspec": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2015-04-27 22:15:08" + }, + { + "name": "phpunit/php-code-coverage", + "version": "2.1.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "6044546998c7627ab997501a3d0db972b3db9790" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6044546998c7627ab997501a3d0db972b3db9790", + "reference": "6044546998c7627ab997501a3d0db972b3db9790", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "~1.3", + "sebastian/environment": "~1.0", + "sebastian/version": "~1.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.2.1", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" } }, "autoload": { "classmap": [ - "PHP/" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], "license": [ "BSD-3-Clause" ], @@ -67,35 +230,37 @@ "testing", "xunit" ], - "time": "2013-09-10 08:14:32" + "time": "2015-07-13 11:25:58" }, { "name": "phpunit/php-file-iterator", - "version": "1.3.4", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb" + "reference": "a923bb15680d0089e2316f7a4af8f437046e96bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/acd690379117b042d1c8af1fafd61bde001bf6bb", - "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a923bb15680d0089e2316f7a4af8f437046e96bb", + "reference": "a923bb15680d0089e2316f7a4af8f437046e96bb", "shasum": "" }, "require": { "php": ">=5.3.3" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, "autoload": { "classmap": [ - "File/" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], "license": [ "BSD-3-Clause" ], @@ -112,20 +277,20 @@ "filesystem", "iterator" ], - "time": "2013-10-10 15:34:57" + "time": "2015-04-02 05:19:05" }, { "name": "phpunit/php-text-template", - "version": "1.1.4", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5180896f51c5b3648ac946b05f9ec02be78a0b23" + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5180896f51c5b3648ac946b05f9ec02be78a0b23", - "reference": "5180896f51c5b3648ac946b05f9ec02be78a0b23", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", "shasum": "" }, "require": { @@ -134,20 +299,17 @@ "type": "library", "autoload": { "classmap": [ - "Text/" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -156,20 +318,20 @@ "keywords": [ "template" ], - "time": "2012-10-31 18:15:28" + "time": "2015-06-21 13:50:34" }, { "name": "phpunit/php-timer", - "version": "1.0.5", + "version": "1.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c" + "reference": "83fe1bdc5d47658b727595c14da140da92b3d66d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/19689d4354b295ee3d8c54b4f42c3efb69cbc17c", - "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/83fe1bdc5d47658b727595c14da140da92b3d66d", + "reference": "83fe1bdc5d47658b727595c14da140da92b3d66d", "shasum": "" }, "require": { @@ -178,13 +340,10 @@ "type": "library", "autoload": { "classmap": [ - "PHP/" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], "license": [ "BSD-3-Clause" ], @@ -200,49 +359,48 @@ "keywords": [ "timer" ], - "time": "2013-08-02 07:42:54" + "time": "2015-06-13 07:35:30" }, { "name": "phpunit/php-token-stream", - "version": "1.2.1", + "version": "1.4.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "5220af2a7929aa35cf663d97c89ad3d50cf5fa3e" + "reference": "7a9b0969488c3c54fd62b4d504b3ec758fd005d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/5220af2a7929aa35cf663d97c89ad3d50cf5fa3e", - "reference": "5220af2a7929aa35cf663d97c89ad3d50cf5fa3e", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/7a9b0969488c3c54fd62b4d504b3ec758fd005d9", + "reference": "7a9b0969488c3c54fd62b4d504b3ec758fd005d9", "shasum": "" }, "require": { "ext-tokenizer": "*", "php": ">=5.3.3" }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "1.4-dev" } }, "autoload": { "classmap": [ - "PHP/" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" + "email": "sebastian@phpunit.de" } ], "description": "Wrapper around PHP's tokenizer extension.", @@ -250,63 +408,61 @@ "keywords": [ "tokenizer" ], - "time": "2013-09-13 04:58:23" + "time": "2015-06-19 03:43:16" }, { "name": "phpunit/phpunit", - "version": "3.7.28", + "version": "4.6.10", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "3b97c8492bcafbabe6b6fbd2ab35f2f04d932a8d" + "reference": "7b5fe98b28302a8b25693b2298bca74463336975" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3b97c8492bcafbabe6b6fbd2ab35f2f04d932a8d", - "reference": "3b97c8492bcafbabe6b6fbd2ab35f2f04d932a8d", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/7b5fe98b28302a8b25693b2298bca74463336975", + "reference": "7b5fe98b28302a8b25693b2298bca74463336975", "shasum": "" }, "require": { "ext-dom": "*", + "ext-json": "*", "ext-pcre": "*", "ext-reflection": "*", "ext-spl": "*", "php": ">=5.3.3", - "phpunit/php-code-coverage": "~1.2.1", - "phpunit/php-file-iterator": ">=1.3.1", - "phpunit/php-text-template": ">=1.1.1", - "phpunit/php-timer": ">=1.0.4", - "phpunit/phpunit-mock-objects": "~1.2.0", - "symfony/yaml": "~2.0" - }, - "require-dev": { - "pear-pear/pear": "1.9.4" + "phpspec/prophecy": "~1.3,>=1.3.1", + "phpunit/php-code-coverage": "~2.0,>=2.0.11", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "~1.0", + "phpunit/phpunit-mock-objects": "~2.3", + "sebastian/comparator": "~1.1", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.2", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/version": "~1.0", + "symfony/yaml": "~2.1|~3.0" }, "suggest": { - "ext-json": "*", - "ext-simplexml": "*", - "ext-tokenizer": "*", - "phpunit/php-invoker": ">=1.1.0,<1.2.0" + "phpunit/php-invoker": "~1.1" }, "bin": [ - "composer/bin/phpunit" + "phpunit" ], "type": "library", "extra": { "branch-alias": { - "dev-master": "3.7.x-dev" + "dev-master": "4.6.x-dev" } }, "autoload": { "classmap": [ - "PHPUnit/" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "", - "../../symfony/yaml/" - ], "license": [ "BSD-3-Clause" ], @@ -318,45 +474,51 @@ } ], "description": "The PHP Unit Testing framework.", - "homepage": "http://www.phpunit.de/", + "homepage": "https://phpunit.de/", "keywords": [ "phpunit", "testing", "xunit" ], - "time": "2013-10-17 07:27:40" + "time": "2015-06-03 05:03:30" }, { "name": "phpunit/phpunit-mock-objects", - "version": "1.2.3", + "version": "2.3.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "5794e3c5c5ba0fb037b11d8151add2a07fa82875" + "reference": "1c330b1b6e1ea8fd15f2fbea46770576e366855c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/5794e3c5c5ba0fb037b11d8151add2a07fa82875", - "reference": "5794e3c5c5ba0fb037b11d8151add2a07fa82875", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/1c330b1b6e1ea8fd15f2fbea46770576e366855c", + "reference": "1c330b1b6e1ea8fd15f2fbea46770576e366855c", "shasum": "" }, "require": { + "doctrine/instantiator": "~1.0,>=1.0.2", "php": ">=5.3.3", - "phpunit/php-text-template": ">=1.1.1@stable" + "phpunit/php-text-template": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" }, "suggest": { "ext-soap": "*" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.x-dev" + } + }, "autoload": { "classmap": [ - "PHPUnit/" + "src/" ] }, "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], "license": [ "BSD-3-Clause" ], @@ -373,20 +535,391 @@ "mock", "xunit" ], - "time": "2013-01-13 10:24:48" + "time": "2015-07-04 05:41:32" }, { - "name": "squizlabs/php_codesniffer", - "version": "1.5.1", + "name": "sebastian/comparator", + "version": "1.1.1", "source": { "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "bd1e50b8c252c914881dba1dcef089219e430dbd" + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "1dd8869519a225f7f2b9eb663e225298fade819e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/bd1e50b8c252c914881dba1dcef089219e430dbd", - "reference": "bd1e50b8c252c914881dba1dcef089219e430dbd", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dd8869519a225f7f2b9eb663e225298fade819e", + "reference": "1dd8869519a225f7f2b9eb663e225298fade819e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2015-01-29 16:28:08" + }, + { + "name": "sebastian/diff", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/863df9687835c62aa423a22412d26fa2ebde3fd3", + "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "http://www.github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2015-02-22 15:13:53" + }, + { + "name": "sebastian/environment", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5a8c7d31914337b69923db26c4221b81ff5a196e", + "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2015-01-01 10:01:08" + }, + { + "name": "sebastian/exporter", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "84839970d05254c73cde183a721c7af13aede943" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/84839970d05254c73cde183a721c7af13aede943", + "reference": "84839970d05254c73cde183a721c7af13aede943", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2015-01-27 07:23:06" + }, + { + "name": "sebastian/global-state", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/c7428acdb62ece0a45e6306f1ae85e1c05b09c01", + "reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2014-10-06 09:23:50" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "3989662bbb30a29d20d9faa04a846af79b276252" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/3989662bbb30a29d20d9faa04a846af79b276252", + "reference": "3989662bbb30a29d20d9faa04a846af79b276252", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2015-01-24 09:48:32" + }, + { + "name": "sebastian/version", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "shasum": "" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2015-06-21 13:59:46" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "1.5.6", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "6f3e42d311b882b25b4d409d23a289f4d3b803d5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/6f3e42d311b882b25b4d409d23a289f4d3b803d5", + "reference": "6f3e42d311b882b25b4d409d23a289f4d3b803d5", "shasum": "" }, "require": { @@ -400,6 +933,11 @@ "scripts/phpcs" ], "type": "library", + "extra": { + "branch-alias": { + "dev-phpcs-fixer": "2.0.x-dev" + } + }, "autoload": { "classmap": [ "CodeSniffer.php", @@ -443,34 +981,36 @@ "phpcs", "standards" ], - "time": "2013-12-12 03:08:49" + "time": "2014-12-04 22:32:15" }, { "name": "symfony/yaml", - "version": "v2.4.1", - "target-dir": "Symfony/Component/Yaml", + "version": "v2.7.2", "source": { "type": "git", "url": "https://github.com/symfony/Yaml.git", - "reference": "4e1a237fc48145fae114b96458d799746ad89aa0" + "reference": "4bfbe0ed3909bfddd75b70c094391ec1f142f860" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Yaml/zipball/4e1a237fc48145fae114b96458d799746ad89aa0", - "reference": "4e1a237fc48145fae114b96458d799746ad89aa0", + "url": "https://api.github.com/repos/symfony/Yaml/zipball/4bfbe0ed3909bfddd75b70c094391ec1f142f860", + "reference": "4bfbe0ed3909bfddd75b70c094391ec1f142f860", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=5.3.9" + }, + "require-dev": { + "symfony/phpunit-bridge": "~2.7" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.4-dev" + "dev-master": "2.7-dev" } }, "autoload": { - "psr-0": { + "psr-4": { "Symfony\\Component\\Yaml\\": "" } }, @@ -485,25 +1025,19 @@ }, { "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "homepage": "https://symfony.com/contributors" } ], "description": "Symfony Yaml Component", - "homepage": "http://symfony.com", - "time": "2013-12-28 08:12:03" + "homepage": "https://symfony.com", + "time": "2015-07-01 11:25:50" } ], - "aliases": [ - - ], + "aliases": [], "minimum-stability": "stable", - "stability-flags": [ - - ], - "platform": [ - - ], - "platform-dev": [ - - ] + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [] } From 1e16eb0c8be73542ac3398b9d7b3cf2bfdf15ac7 Mon Sep 17 00:00:00 2001 From: ftwbzhao Date: Mon, 20 Jul 2015 17:01:36 +0800 Subject: [PATCH 057/127] add parameter type in Facade Test --- Structural/Facade/Tests/FacadeTest.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Structural/Facade/Tests/FacadeTest.php b/Structural/Facade/Tests/FacadeTest.php index eccb9be..18133e9 100644 --- a/Structural/Facade/Tests/FacadeTest.php +++ b/Structural/Facade/Tests/FacadeTest.php @@ -3,6 +3,7 @@ namespace DesignPatterns\Structural\Facade\Tests; use DesignPatterns\Structural\Facade\Facade as Computer; +use DesignPatterns\Structural\Facade\OsInterface; /** * FacadeTest shows example of facades @@ -35,7 +36,7 @@ class FacadeTest extends \PHPUnit_Framework_TestCase /** * @dataProvider getComputer */ - public function testComputerOn(Computer $facade, $os) + public function testComputerOn(Computer $facade, OsInterface $os) { // interface is simpler : $facade->turnOn(); From 1b068456c1b768848be3ce0544bf10d28d81c847 Mon Sep 17 00:00:00 2001 From: victor Date: Mon, 20 Jul 2015 18:32:30 +0300 Subject: [PATCH 058/127] Add Entity-Attribute-Value (EAV) pattern --- More/EAV/Attribute.php | 71 +++++++++++++++++++++++++++++++++++++ More/EAV/Entity.php | 71 +++++++++++++++++++++++++++++++++++++ More/EAV/Value.php | 52 +++++++++++++++++++++++++++ More/EAV/ValueInterface.php | 24 +++++++++++++ More/EAV/example.php | 68 +++++++++++++++++++++++++++++++++++ 5 files changed, 286 insertions(+) create mode 100644 More/EAV/Attribute.php create mode 100644 More/EAV/Entity.php create mode 100644 More/EAV/Value.php create mode 100644 More/EAV/ValueInterface.php create mode 100644 More/EAV/example.php diff --git a/More/EAV/Attribute.php b/More/EAV/Attribute.php new file mode 100644 index 0000000..43a5d4c --- /dev/null +++ b/More/EAV/Attribute.php @@ -0,0 +1,71 @@ +values; + } + + /** + * @param Value|ValueInterface $value + * @return $this + */ + public function addValue(ValueInterface $value) + { + // @TODO I think the $value should be checked for uniqueness first to avoid duplication in array. + $this->values[] = $value; + + return $this; + } + + /** + * @param Value|ValueInterface $value + * @return $this + */ + public function removeValue(ValueInterface $value) + { + if ($key = array_search($value, $this->values, true)) { + unset($this->values[$key]); + } + + return $this; + } + + /** + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * @param string $name + * @return $this + */ + public function setName($name) + { + $this->name = $name; + + return $this; + } +} diff --git a/More/EAV/Entity.php b/More/EAV/Entity.php new file mode 100644 index 0000000..7234b7d --- /dev/null +++ b/More/EAV/Entity.php @@ -0,0 +1,71 @@ +values; + } + + /** + * @param Value|ValueInterface $value + * @return $this + */ + public function addValue(ValueInterface $value) + { + // @TODO I think the $value should be checked for uniqueness first to avoid duplication in array. + $this->values[] = $value; + + return $this; + } + + /** + * @param Value|ValueInterface $value + * @return $this + */ + public function removeValue(ValueInterface $value) + { + if ($key = array_search($value, $this->values, true)) { + unset($this->values[$key]); + } + + return $this; + } + + /** + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * @param string $name + * @return $this + */ + public function setName($name) + { + $this->name = $name; + + return $this; + } +} diff --git a/More/EAV/Value.php b/More/EAV/Value.php new file mode 100644 index 0000000..362ac5c --- /dev/null +++ b/More/EAV/Value.php @@ -0,0 +1,52 @@ +addValue($this); + $this->attribute = $attribute; + } + + /** + * @return Attribute + */ + public function getAttribute() + { + return $this->attribute; + } + + /** + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * @param string $name + * @return $this + */ + public function setName($name) + { + $this->name = $name; + + return $this; + } +} diff --git a/More/EAV/ValueInterface.php b/More/EAV/ValueInterface.php new file mode 100644 index 0000000..e0c299a --- /dev/null +++ b/More/EAV/ValueInterface.php @@ -0,0 +1,24 @@ +setName('Color'); +// color values +$colorSilver = (new Value($color))->setName('Silver'); +$colorGold = (new Value($color))->setName('Gold'); +$colorSpaceGrey = (new Value($color))->setName('Space Grey'); + +// memory attribute +$memory = (new Attribute())->setName('Memory'); +// memory values +$memory4Gb = (new Value($memory))->setName('4GB'); +$memory8Gb = (new Value($memory))->setName('8GB'); +$memory16Gb = (new Value($memory))->setName('16GB'); + +// storage attribute +$storage = (new Attribute())->setName('Storage'); +// storage values +$storage128Gb = (new Value($storage))->setName('128GB'); +$storage256Gb = (new Value($storage))->setName('256GB'); +$storage512Gb = (new Value($storage))->setName('512GB'); +$storage1Tb = (new Value($storage))->setName('1TB'); + +// entities +$mac = (new Entity()) + ->setName('MacBook') + // colors + ->addValue($colorSilver) + ->addValue($colorGold) + ->addValue($colorSpaceGrey) + // memories + ->addValue($memory8Gb) + // storages + ->addValue($storage256Gb) + ->addValue($storage512Gb) +; + +$macAir = (new Entity()) + ->setName('MacBook Air') + // colors + ->addValue($colorSilver) + // memories + ->addValue($memory4Gb) + ->addValue($memory8Gb) + // storages + ->addValue($storage128Gb) + ->addValue($storage256Gb) + ->addValue($storage512Gb) +; + +$macPro = (new Entity()) + ->setName('MacBook Pro') + // colors + ->addValue($colorSilver) + // memories + ->addValue($memory8Gb) + ->addValue($memory16Gb) + // storages + ->addValue($storage128Gb) + ->addValue($storage256Gb) + ->addValue($storage512Gb) + ->addValue($storage1Tb) +; From f5c075f02dda9ef76a36ad13f414fd4e1b9c5b8a Mon Sep 17 00:00:00 2001 From: victor Date: Tue, 21 Jul 2015 10:57:01 +0300 Subject: [PATCH 059/127] Fix bugs and include Composer autoloader to example.php --- More/EAV/Attribute.php | 6 +++--- More/EAV/Entity.php | 6 +++--- More/EAV/Value.php | 5 ++++- More/EAV/ValueAccessInterface.php | 24 ++++++++++++++++++++++++ More/EAV/ValueInterface.php | 13 ++++--------- More/EAV/example.php | 2 ++ 6 files changed, 40 insertions(+), 16 deletions(-) create mode 100644 More/EAV/ValueAccessInterface.php diff --git a/More/EAV/Attribute.php b/More/EAV/Attribute.php index 43a5d4c..f7af581 100644 --- a/More/EAV/Attribute.php +++ b/More/EAV/Attribute.php @@ -5,10 +5,10 @@ namespace DesignPatterns\More\EAV; /** * Class Attribute */ -class Attribute implements ValueInterface +class Attribute implements ValueAccessInterface { /** - * @var Value[]|ValueInterface[]|array + * @var array|Value[]|ValueInterface[] */ private $values = []; @@ -18,7 +18,7 @@ class Attribute implements ValueInterface private $name; /** - * @return Value[]|ValueInterface[]|array + * @return array|Value[]|ValueInterface[] */ public function getValues() { diff --git a/More/EAV/Entity.php b/More/EAV/Entity.php index 7234b7d..4da304a 100644 --- a/More/EAV/Entity.php +++ b/More/EAV/Entity.php @@ -5,10 +5,10 @@ namespace DesignPatterns\More\EAV; /** * Class Entity */ -class Entity implements ValueInterface +class Entity implements ValueAccessInterface { /** - * @var Value[]|ValueInterface[]|array + * @var array|Value[]|ValueInterface[] */ private $values = []; @@ -18,7 +18,7 @@ class Entity implements ValueInterface private $name; /** - * @return Value[]|ValueInterface[]|array + * @return array|Value[]|ValueInterface[] */ public function getValues() { diff --git a/More/EAV/Value.php b/More/EAV/Value.php index 362ac5c..9f1d3ae 100644 --- a/More/EAV/Value.php +++ b/More/EAV/Value.php @@ -5,7 +5,7 @@ namespace DesignPatterns\More\EAV; /** * Class Value */ -class Value +class Value implements ValueInterface { /** * @var Attribute @@ -17,6 +17,9 @@ class Value */ private $name; + /** + * @param Attribute $attribute + */ public function __construct(Attribute $attribute) { $attribute->addValue($this); diff --git a/More/EAV/ValueAccessInterface.php b/More/EAV/ValueAccessInterface.php new file mode 100644 index 0000000..ccb4725 --- /dev/null +++ b/More/EAV/ValueAccessInterface.php @@ -0,0 +1,24 @@ + Date: Tue, 21 Jul 2015 11:07:31 +0300 Subject: [PATCH 060/127] Add README template --- More/EAV/README.rst | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 More/EAV/README.rst diff --git a/More/EAV/README.rst b/More/EAV/README.rst new file mode 100644 index 0000000..8aab2f1 --- /dev/null +++ b/More/EAV/README.rst @@ -0,0 +1,31 @@ +`Entity-Attribute-Value (EAV)`__ +================================ + +Purpose +------- + +... + +Examples +-------- + +... + +UML Diagram +----------- + +... + +Code +---- + +You can also find these code on `GitHub`_ + +Test +---- + +... + + +.. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/More/EAV +.. __: https://en.wikipedia.org/wiki/Entity–attribute–value_model From f7c032afe4cc844b6740b5085afaeabe13b76e44 Mon Sep 17 00:00:00 2001 From: athanro Date: Tue, 21 Jul 2015 17:17:36 +0200 Subject: [PATCH 061/127] fix CompositeTest namespace --- Structural/Composite/Tests/CompositeTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Structural/Composite/Tests/CompositeTest.php b/Structural/Composite/Tests/CompositeTest.php index 71aa98e..f3ee1d1 100644 --- a/Structural/Composite/Tests/CompositeTest.php +++ b/Structural/Composite/Tests/CompositeTest.php @@ -1,6 +1,6 @@ Date: Thu, 23 Jul 2015 16:28:49 -0700 Subject: [PATCH 062/127] Filling out some basic readme --- More/Delegation/README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/More/Delegation/README.rst b/More/Delegation/README.rst index b6172c6..78ae5b6 100644 --- a/More/Delegation/README.rst +++ b/More/Delegation/README.rst @@ -4,12 +4,12 @@ Purpose ------- -... +Demonstrate the Delegator pattern. Examples -------- -... +Please review JuniorDeveloper.php, TeamLead.php, and then Usage.php to see it all tied together. UML Diagram ----------- From 3ea4bf760371de2a5bbfcb70ddf3b530a626e146 Mon Sep 17 00:00:00 2001 From: Jasmine Hegman Date: Thu, 23 Jul 2015 16:31:44 -0700 Subject: [PATCH 063/127] Further explaining the pattern --- More/Delegation/README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/More/Delegation/README.rst b/More/Delegation/README.rst index 78ae5b6..69306ad 100644 --- a/More/Delegation/README.rst +++ b/More/Delegation/README.rst @@ -4,7 +4,7 @@ Purpose ------- -Demonstrate the Delegator pattern. +Demonstrate the Delegator pattern, where an object, instead of performing one of its stated tasks, delegates that task to an associated helper object. In this case TeamLead professes to writeCode and Usage uses this, while TeamLead delegates writeCode to JuniorDeveloper's writeBadCode function. This inverts the responsibility so that Usage is unknowingly executing writeBadCode. Examples -------- From d9b3cc2eb1f1fffc1ef49589676936825f402f39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B8=CC=86=20=D0=A1=D0=BE?= =?UTF-8?q?=D0=B1=D0=BA=D0=B0=D0=BD=D1=8E=D0=BA?= Date: Thu, 6 Aug 2015 17:54:39 +0300 Subject: [PATCH 064/127] Fix typo in method annotation --- Creational/Builder/Director.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Creational/Builder/Director.php b/Creational/Builder/Director.php index d7f3aa3..3d125d9 100644 --- a/Creational/Builder/Director.php +++ b/Creational/Builder/Director.php @@ -12,7 +12,7 @@ class Director { /** - * The director don't know 'bout concrete part + * The director don't know about concrete part * * @param BuilderInterface $builder * From 991a10f5cdb9d9616f0426fc90e9132852afbc54 Mon Sep 17 00:00:00 2001 From: Eddie Abou-Jaoude Date: Sat, 15 Aug 2015 12:14:17 +0100 Subject: [PATCH 065/127] Update ignore to ignore vagrant files --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 57f6f89..4a69314 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,5 @@ /vendor/ _build/ *.mo +.vagrant/ +phpunit.xml From 5df676e75c042e389d2ed16a0cc20eefb4b1d42d Mon Sep 17 00:00:00 2001 From: Eddie Abou-Jaoude Date: Sat, 15 Aug 2015 12:20:19 +0100 Subject: [PATCH 066/127] composer phar added to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 4a69314..c6fa3e1 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ _build/ *.mo .vagrant/ phpunit.xml +composer.phar From 8f70b116522c7d2a637f21e1dd6e9e16857687c5 Mon Sep 17 00:00:00 2001 From: Eddie Abou-Jaoude Date: Sat, 15 Aug 2015 12:21:01 +0100 Subject: [PATCH 067/127] vagrant & ansible scripts added inc docs in README --- README.md | 32 +++++++++++ Vagrantfile | 59 +++++++++++++++++++++ ansible/inventories/dev | 2 + ansible/playbook.yml | 11 ++++ ansible/roles/app/tasks/main.yml | 5 ++ ansible/roles/php/handlers/main.yml | 3 ++ ansible/roles/php/tasks/configure.yml | 9 ++++ ansible/roles/php/tasks/main.yml | 25 +++++++++ ansible/roles/php/tasks/pecl.yml | 26 +++++++++ ansible/roles/php/tasks/php-cli.yml | 10 ++++ ansible/roles/php/templates/extension.tpl | 2 + ansible/roles/server/tasks/main.yml | 31 +++++++++++ ansible/roles/server/templates/timezone.tpl | 1 + ansible/roles/vagrant_local/tasks/main.yml | 11 ++++ ansible/roles/xdebug/defaults/main.yml | 7 +++ ansible/roles/xdebug/tasks/main.yml | 4 ++ ansible/vars/all.yml | 15 ++++++ ansible/windows.sh | 31 +++++++++++ 18 files changed, 284 insertions(+) create mode 100755 Vagrantfile create mode 100755 ansible/inventories/dev create mode 100755 ansible/playbook.yml create mode 100755 ansible/roles/app/tasks/main.yml create mode 100755 ansible/roles/php/handlers/main.yml create mode 100755 ansible/roles/php/tasks/configure.yml create mode 100755 ansible/roles/php/tasks/main.yml create mode 100755 ansible/roles/php/tasks/pecl.yml create mode 100755 ansible/roles/php/tasks/php-cli.yml create mode 100755 ansible/roles/php/templates/extension.tpl create mode 100755 ansible/roles/server/tasks/main.yml create mode 100755 ansible/roles/server/templates/timezone.tpl create mode 100755 ansible/roles/vagrant_local/tasks/main.yml create mode 100755 ansible/roles/xdebug/defaults/main.yml create mode 100755 ansible/roles/xdebug/tasks/main.yml create mode 100755 ansible/vars/all.yml create mode 100755 ansible/windows.sh diff --git a/README.md b/README.md index 0d9e054..f941f1b 100755 --- a/README.md +++ b/README.md @@ -13,12 +13,44 @@ I think the problem with patterns is that often people do know them but don't kn You should look at and run the tests to see what happens in the example. To do this, you should install dependencies with `Composer` first: +### [optional] Using a Virtual Machine (VM) + +If you wish to use a ready made VM environment, you can easily create one with Vagrant and Ansible. + +```bash +$ vagrant up +``` + +### Install dependencies + ```bash $ composer install ``` Read more about how to install and use `Composer` on your local machine [here](https://getcomposer.org/doc/00-intro.md#installation-linux-unix-osx). +### Running test suite + +```bash +$ ./vendor/bin/phpunit +``` + +Output example + +```bash +vagrant@design-patterns:/vagrant$ ./vendor/bin/phpunit +PHPUnit 4.6.10 by Sebastian Bergmann and contributors. + +Configuration read from /vagrant/phpunit.xml + +................................................................. 65 / 71 ( 91%) +...... + +Time: 554 ms, Memory: 5.75Mb + +OK (71 tests, 128 assertions) +``` + ## Patterns The patterns can be structured in roughly three different categories. Please click on the [:notebook:](http://en.wikipedia.org/wiki/Software_design_pattern) for a full explanation of the pattern on Wikipedia. diff --git a/Vagrantfile b/Vagrantfile new file mode 100755 index 0000000..30f924c --- /dev/null +++ b/Vagrantfile @@ -0,0 +1,59 @@ +################################################## +# Generated by phansible.com +################################################## + +#If your Vagrant version is lower than 1.5, you can still use this provisioning +#by commenting or removing the line below and providing the config.vm.box_url parameter, +#if it's not already defined in this Vagrantfile. Keep in mind that you won't be able +#to use the Vagrant Cloud and other newer Vagrant features. +Vagrant.require_version ">= 1.5" + +# Check to determine whether we're on a windows or linux/os-x host, +# later on we use this to launch ansible in the supported way +# source: https://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby +def which(cmd) + exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : [''] + ENV['PATH'].split(File::PATH_SEPARATOR).each do |path| + exts.each { |ext| + exe = File.join(path, "#{cmd}#{ext}") + return exe if File.executable? exe + } + end + return nil +end +Vagrant.configure("2") do |config| + + config.vm.provider :virtualbox do |v| + v.name = "design-patterns" + v.customize [ + "modifyvm", :id, + "--name", "design-patterns", + "--memory", 512, + "--natdnshostresolver1", "on", + "--cpus", 1, + ] + end + + config.vm.box = "ubuntu/trusty64" + + config.vm.network :private_network, ip: "192.168.11.2" + config.ssh.forward_agent = true + + ############################################################# + # Ansible provisioning (you need to have ansible installed) + ############################################################# + + + if which('ansible-playbook') + config.vm.provision "ansible" do |ansible| + ansible.playbook = "ansible/playbook.yml" + ansible.inventory_path = "ansible/inventories/dev" + ansible.limit = 'all' + end + else + config.vm.provision :shell, path: "ansible/windows.sh", args: ["default"] + end + + + config.vm.synced_folder "./", "/vagrant", type: "nfs" +end diff --git a/ansible/inventories/dev b/ansible/inventories/dev new file mode 100755 index 0000000..86d8f3b --- /dev/null +++ b/ansible/inventories/dev @@ -0,0 +1,2 @@ +[phansible-web] +192.168.11.2 diff --git a/ansible/playbook.yml b/ansible/playbook.yml new file mode 100755 index 0000000..33e3fda --- /dev/null +++ b/ansible/playbook.yml @@ -0,0 +1,11 @@ +--- +- hosts: all + sudo: true + vars_files: + - vars/all.yml + roles: + - server + - vagrant_local + - php + - xdebug + - app diff --git a/ansible/roles/app/tasks/main.yml b/ansible/roles/app/tasks/main.yml new file mode 100755 index 0000000..c330e48 --- /dev/null +++ b/ansible/roles/app/tasks/main.yml @@ -0,0 +1,5 @@ +--- +# application tasks to be customized and to run after the main provision +- name: update file db + sudo: yes + shell: updatedb diff --git a/ansible/roles/php/handlers/main.yml b/ansible/roles/php/handlers/main.yml new file mode 100755 index 0000000..915cc8a --- /dev/null +++ b/ansible/roles/php/handlers/main.yml @@ -0,0 +1,3 @@ +--- +- name: restart php5-fpm + service: name=php5-fpm enabled=yes state=restarted diff --git a/ansible/roles/php/tasks/configure.yml b/ansible/roles/php/tasks/configure.yml new file mode 100755 index 0000000..c334a60 --- /dev/null +++ b/ansible/roles/php/tasks/configure.yml @@ -0,0 +1,9 @@ +--- +#- stat: path=/etc/php5/fpm/php.ini +# register: phpfpm + +- stat: path=/etc/php5/cli/php.ini + register: phpcli + +- include: php-cli.yml + when: phpcli.stat.exists diff --git a/ansible/roles/php/tasks/main.yml b/ansible/roles/php/tasks/main.yml new file mode 100755 index 0000000..b554426 --- /dev/null +++ b/ansible/roles/php/tasks/main.yml @@ -0,0 +1,25 @@ +--- +- name: Add ppa Repository + sudo: yes + apt_repository: repo=ppa:ondrej/{{ php.ppa }} + +- name: Update apt + sudo: yes + apt: update_cache=yes + +- name: Install php5 + sudo: yes + apt: pkg=php5 state=latest + +- name: Install PHP Packages + sudo: yes + apt: pkg={{ item }} state=latest + with_items: php.packages + when: php.packages is defined + +- name: Install pear + sudo: yes + apt: pkg=php-pear state=latest + +- include: configure.yml +- include: pecl.yml diff --git a/ansible/roles/php/tasks/pecl.yml b/ansible/roles/php/tasks/pecl.yml new file mode 100755 index 0000000..399219f --- /dev/null +++ b/ansible/roles/php/tasks/pecl.yml @@ -0,0 +1,26 @@ +- name: Install + apt: pkg="php5-dev" state=present + when: php.pecl_packages is defined + +- name: Install Package + shell: echo "\n\n\n\n\n\n\n\n\n" | pecl install {{ item }} + register: pecl_result + changed_when: "'already installed' not in pecl_result.stdout" + failed_when: "pecl_result.stderr or ('ERROR' in pecl_result.stdout)" + with_items: php.pecl_packages + when: php.pecl_packages is defined + +- name: Create extension .ini file + template: > + src="extension.tpl" + dest="/etc/php5/mods-available/{{ item }}.ini" + owner="root" + group="root" + mode=0644 + with_items: php.pecl_packages + when: php.pecl_packages is defined + +- name: Enable extension + shell: php5enmod {{ item }} + with_items: php.pecl_packages + when: php.pecl_packages is defined diff --git a/ansible/roles/php/tasks/php-cli.yml b/ansible/roles/php/tasks/php-cli.yml new file mode 100755 index 0000000..e1cfffa --- /dev/null +++ b/ansible/roles/php/tasks/php-cli.yml @@ -0,0 +1,10 @@ +--- +- name: ensure timezone is set in cli php.ini + lineinfile: dest=/etc/php5/cli/php.ini + regexp='date.timezone =' + line='date.timezone = {{ server.timezone }}' + +- name: enabling opcache cli + lineinfile: dest=/etc/php5/cli/php.ini + regexp=';opcache.enable_cli=0' + line='opcache.enable_cli=1' diff --git a/ansible/roles/php/templates/extension.tpl b/ansible/roles/php/templates/extension.tpl new file mode 100755 index 0000000..1b13534 --- /dev/null +++ b/ansible/roles/php/templates/extension.tpl @@ -0,0 +1,2 @@ +; Configuration for php PECL {{ item }} extension +extension={{ item }}.so diff --git a/ansible/roles/server/tasks/main.yml b/ansible/roles/server/tasks/main.yml new file mode 100755 index 0000000..f1ffc08 --- /dev/null +++ b/ansible/roles/server/tasks/main.yml @@ -0,0 +1,31 @@ +--- +- name: Update apt + sudo: yes + apt: update_cache=yes + +- name: Install System Packages + sudo: yes + apt: pkg={{ item }} state=latest + with_items: + - curl + - wget + - python-software-properties + +- name: Install Extra Packages + sudo: yes + apt: pkg={{ item }} state=latest + with_items: server.packages + when: server.packages is defined + +- name: Configure the timezone + sudo: yes + template: src=timezone.tpl dest=/etc/timezone + +- name: More Configure the timezone + sudo: yes + file: src=/usr/share/zoneinfo/{{server.timezone}} dest=/etc/localtime state=link force=yes backup=yes + +- name: Set default system language pack + shell: locale-gen {{server.locale}} + sudo: yes + diff --git a/ansible/roles/server/templates/timezone.tpl b/ansible/roles/server/templates/timezone.tpl new file mode 100755 index 0000000..cca2365 --- /dev/null +++ b/ansible/roles/server/templates/timezone.tpl @@ -0,0 +1 @@ +{{server.timezone}} diff --git a/ansible/roles/vagrant_local/tasks/main.yml b/ansible/roles/vagrant_local/tasks/main.yml new file mode 100755 index 0000000..cd53609 --- /dev/null +++ b/ansible/roles/vagrant_local/tasks/main.yml @@ -0,0 +1,11 @@ +--- +- name: Set the hostname in /etc/hostname + shell: echo {{ vagrant_local.vm.hostname }} > /etc/hostname + when: vagrant_local.vm.hostname is defined + +- name: Set the hostname + shell: hostname {{ vagrant_local.vm.hostname }} + when: vagrant_local.vm.hostname is defined + +- name: Update /etc/hosts + lineinfile: dest=/etc/hosts regexp='^127\.0\.0\.1' line='127.0.0.1 localhost {{ vagrant_local.vm.hostname }}' owner=root group=root mode=0644 diff --git a/ansible/roles/xdebug/defaults/main.yml b/ansible/roles/xdebug/defaults/main.yml new file mode 100755 index 0000000..f2d917e --- /dev/null +++ b/ansible/roles/xdebug/defaults/main.yml @@ -0,0 +1,7 @@ +--- +xdebug: + settings: + - xdebug.remote_enable=1 + - xdebug.idekey=PHPSTORM + - xdebug.remote_connect_back=1 + - xdebug.remote_port=9000 diff --git a/ansible/roles/xdebug/tasks/main.yml b/ansible/roles/xdebug/tasks/main.yml new file mode 100755 index 0000000..e38815d --- /dev/null +++ b/ansible/roles/xdebug/tasks/main.yml @@ -0,0 +1,4 @@ +--- +- name: Install xDebug + sudo: yes + apt: pkg=php5-xdebug state=latest diff --git a/ansible/vars/all.yml b/ansible/vars/all.yml new file mode 100755 index 0000000..b5559e6 --- /dev/null +++ b/ansible/vars/all.yml @@ -0,0 +1,15 @@ +--- +server: + install: '1' + packages: [vim, htop, iotop, bwm-ng] + timezone: UTC + locale: en_US.UTF-8 +vagrant_local: + install: '1' + vm: { base_box: trusty64, hostname: design-patterns, ip: 192.168.11.2, sharedfolder: ./, enableWindows: '1', useVagrantCloud: '1', syncType: nfs } +php: + install: '1' + ppa: php5-5.6 + packages: [php5-cli, php5-intl, php5-mcrypt, php5-mysql, php5-curl, php5-json] +xdebug: + install: '1' diff --git a/ansible/windows.sh b/ansible/windows.sh new file mode 100755 index 0000000..eab5d9a --- /dev/null +++ b/ansible/windows.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +# Update Repositories +sudo apt-get update + +# Determine Ubuntu Version +. /etc/lsb-release + +# Decide on package to install for `add-apt-repository` command +# +# USE_COMMON=1 when using a distribution over 12.04 +# USE_COMMON=0 when using a distribution at 12.04 or older +USE_COMMON=$(echo "$DISTRIB_RELEASE > 12.04" | bc) + +if [ "$USE_COMMON" -eq "1" ]; +then + sudo apt-get install -y software-properties-common +else + sudo apt-get install -y python-software-properties +fi + +# Add Ansible Repository & Install Ansible +sudo add-apt-repository -y ppa:ansible/ansible +sudo apt-get update +sudo apt-get install -y ansible + +# Setup Ansible for Local Use and Run +cp /vagrant/ansible/inventories/dev /etc/ansible/hosts -f +chmod 666 /etc/ansible/hosts +cat /vagrant/ansible/files/authorized_keys >> /home/vagrant/.ssh/authorized_keys +sudo ansible-playbook /vagrant/ansible/playbook.yml -e hostname=$1 --connection=local \ No newline at end of file From 60a93e228365abe6f5f65232f751b0a22b8223e6 Mon Sep 17 00:00:00 2001 From: Eddie Abou-Jaoude Date: Sat, 15 Aug 2015 12:22:19 +0100 Subject: [PATCH 068/127] Link to vagrant docs added to README --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index f941f1b..5158b3f 100755 --- a/README.md +++ b/README.md @@ -21,6 +21,8 @@ If you wish to use a ready made VM environment, you can easily create one with V $ vagrant up ``` +More information on [vagrant](https://www.vagrantup.com) + ### Install dependencies ```bash From f158b2c70173e23491e61949619eec8ba0fc9597 Mon Sep 17 00:00:00 2001 From: Eddie Abou-Jaoude Date: Sat, 15 Aug 2015 12:35:14 +0100 Subject: [PATCH 069/127] project path in VM added to README --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 5158b3f..a38ff89 100755 --- a/README.md +++ b/README.md @@ -21,6 +21,8 @@ If you wish to use a ready made VM environment, you can easily create one with V $ vagrant up ``` +Then `vagrant ssh` and `cd /vagrant` + More information on [vagrant](https://www.vagrantup.com) ### Install dependencies From faaf99a7ea9bff0c90abbd28e4609b916b21b0b7 Mon Sep 17 00:00:00 2001 From: Eddie Abou-Jaoude Date: Tue, 18 Aug 2015 12:40:49 +0100 Subject: [PATCH 070/127] Removed phpunit output from README --- README.md | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/README.md b/README.md index a38ff89..65d71d7 100755 --- a/README.md +++ b/README.md @@ -39,22 +39,6 @@ Read more about how to install and use `Composer` on your local machine [here](h $ ./vendor/bin/phpunit ``` -Output example - -```bash -vagrant@design-patterns:/vagrant$ ./vendor/bin/phpunit -PHPUnit 4.6.10 by Sebastian Bergmann and contributors. - -Configuration read from /vagrant/phpunit.xml - -................................................................. 65 / 71 ( 91%) -...... - -Time: 554 ms, Memory: 5.75Mb - -OK (71 tests, 128 assertions) -``` - ## Patterns The patterns can be structured in roughly three different categories. Please click on the [:notebook:](http://en.wikipedia.org/wiki/Software_design_pattern) for a full explanation of the pattern on Wikipedia. From 7a1f4eb456933f9bb0d3148038bc4b36ed196058 Mon Sep 17 00:00:00 2001 From: Eddie Abou-Jaoude Date: Tue, 18 Aug 2015 12:41:18 +0100 Subject: [PATCH 071/127] Removed php5-fpm ansible handler --- ansible/roles/php/handlers/main.yml | 3 --- 1 file changed, 3 deletions(-) delete mode 100755 ansible/roles/php/handlers/main.yml diff --git a/ansible/roles/php/handlers/main.yml b/ansible/roles/php/handlers/main.yml deleted file mode 100755 index 915cc8a..0000000 --- a/ansible/roles/php/handlers/main.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- -- name: restart php5-fpm - service: name=php5-fpm enabled=yes state=restarted From 7a90725128f76183a84a7ade5d6861b4bcb1afe5 Mon Sep 17 00:00:00 2001 From: Eddie Abou-Jaoude Date: Tue, 18 Aug 2015 12:41:42 +0100 Subject: [PATCH 072/127] Removed commented out code for php5-fpm --- ansible/roles/php/tasks/configure.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/ansible/roles/php/tasks/configure.yml b/ansible/roles/php/tasks/configure.yml index c334a60..1b093e7 100755 --- a/ansible/roles/php/tasks/configure.yml +++ b/ansible/roles/php/tasks/configure.yml @@ -1,7 +1,4 @@ --- -#- stat: path=/etc/php5/fpm/php.ini -# register: phpfpm - - stat: path=/etc/php5/cli/php.ini register: phpcli From 87cb4e9ca6bbf18e0423f63ad6c350df96cf589c Mon Sep 17 00:00:00 2001 From: Eddie Abou-Jaoude Date: Tue, 18 Aug 2015 12:42:41 +0100 Subject: [PATCH 073/127] Removed Pear & Pecl from Ansible scripts --- ansible/roles/php/tasks/main.yml | 5 ----- ansible/roles/php/tasks/pecl.yml | 26 ----------------------- ansible/roles/php/templates/extension.tpl | 2 -- 3 files changed, 33 deletions(-) delete mode 100755 ansible/roles/php/tasks/pecl.yml delete mode 100755 ansible/roles/php/templates/extension.tpl diff --git a/ansible/roles/php/tasks/main.yml b/ansible/roles/php/tasks/main.yml index b554426..38f2f78 100755 --- a/ansible/roles/php/tasks/main.yml +++ b/ansible/roles/php/tasks/main.yml @@ -17,9 +17,4 @@ with_items: php.packages when: php.packages is defined -- name: Install pear - sudo: yes - apt: pkg=php-pear state=latest - - include: configure.yml -- include: pecl.yml diff --git a/ansible/roles/php/tasks/pecl.yml b/ansible/roles/php/tasks/pecl.yml deleted file mode 100755 index 399219f..0000000 --- a/ansible/roles/php/tasks/pecl.yml +++ /dev/null @@ -1,26 +0,0 @@ -- name: Install - apt: pkg="php5-dev" state=present - when: php.pecl_packages is defined - -- name: Install Package - shell: echo "\n\n\n\n\n\n\n\n\n" | pecl install {{ item }} - register: pecl_result - changed_when: "'already installed' not in pecl_result.stdout" - failed_when: "pecl_result.stderr or ('ERROR' in pecl_result.stdout)" - with_items: php.pecl_packages - when: php.pecl_packages is defined - -- name: Create extension .ini file - template: > - src="extension.tpl" - dest="/etc/php5/mods-available/{{ item }}.ini" - owner="root" - group="root" - mode=0644 - with_items: php.pecl_packages - when: php.pecl_packages is defined - -- name: Enable extension - shell: php5enmod {{ item }} - with_items: php.pecl_packages - when: php.pecl_packages is defined diff --git a/ansible/roles/php/templates/extension.tpl b/ansible/roles/php/templates/extension.tpl deleted file mode 100755 index 1b13534..0000000 --- a/ansible/roles/php/templates/extension.tpl +++ /dev/null @@ -1,2 +0,0 @@ -; Configuration for php PECL {{ item }} extension -extension={{ item }}.so From a4defb21123f583b67c0373f60b3085c8d44c730 Mon Sep 17 00:00:00 2001 From: victor Date: Wed, 19 Aug 2015 15:52:10 +0300 Subject: [PATCH 074/127] Add unit tests and usage example to README --- More/EAV/Attribute.php | 6 +- More/EAV/Entity.php | 6 +- More/EAV/README.rst | 87 +++++++++++++++++++- More/EAV/Tests/AttributeTest.php | 66 ++++++++++++++++ More/EAV/Tests/EntityTest.php | 132 +++++++++++++++++++++++++++++++ More/EAV/Tests/ValueTest.php | 59 ++++++++++++++ More/EAV/Value.php | 10 +++ More/EAV/ValueInterface.php | 5 ++ 8 files changed, 365 insertions(+), 6 deletions(-) create mode 100644 More/EAV/Tests/AttributeTest.php create mode 100644 More/EAV/Tests/EntityTest.php create mode 100644 More/EAV/Tests/ValueTest.php diff --git a/More/EAV/Attribute.php b/More/EAV/Attribute.php index f7af581..7103af9 100644 --- a/More/EAV/Attribute.php +++ b/More/EAV/Attribute.php @@ -43,8 +43,10 @@ class Attribute implements ValueAccessInterface */ public function removeValue(ValueInterface $value) { - if ($key = array_search($value, $this->values, true)) { - unset($this->values[$key]); + $index = array_search($value, $this->values, true); + + if (false !== $index) { + unset($this->values[$index]); } return $this; diff --git a/More/EAV/Entity.php b/More/EAV/Entity.php index 4da304a..5dd7ed1 100644 --- a/More/EAV/Entity.php +++ b/More/EAV/Entity.php @@ -43,8 +43,10 @@ class Entity implements ValueAccessInterface */ public function removeValue(ValueInterface $value) { - if ($key = array_search($value, $this->values, true)) { - unset($this->values[$key]); + $index = array_search($value, $this->values, true); + + if (false !== $index) { + unset($this->values[$index]); } return $this; diff --git a/More/EAV/README.rst b/More/EAV/README.rst index 8aab2f1..0a03ad7 100644 --- a/More/EAV/README.rst +++ b/More/EAV/README.rst @@ -9,7 +9,74 @@ Purpose Examples -------- -... +``` +use DesignPatterns\More\EAV\Entity; +use DesignPatterns\More\EAV\Attribute; +use DesignPatterns\More\EAV\Value; + +// color attribute +$color = (new Attribute())->setName('Color'); +// color values +$colorSilver = (new Value($color))->setName('Silver'); +$colorGold = (new Value($color))->setName('Gold'); +$colorSpaceGrey = (new Value($color))->setName('Space Grey'); + +// memory attribute +$memory = (new Attribute())->setName('Memory'); +// memory values +$memory4Gb = (new Value($memory))->setName('4GB'); +$memory8Gb = (new Value($memory))->setName('8GB'); +$memory16Gb = (new Value($memory))->setName('16GB'); + +// storage attribute +$storage = (new Attribute())->setName('Storage'); +// storage values +$storage128Gb = (new Value($storage))->setName('128GB'); +$storage256Gb = (new Value($storage))->setName('256GB'); +$storage512Gb = (new Value($storage))->setName('512GB'); +$storage1Tb = (new Value($storage))->setName('1TB'); + +// entities +$mac = (new Entity()) + ->setName('MacBook') + // colors + ->addValue($colorSilver) + ->addValue($colorGold) + ->addValue($colorSpaceGrey) + // memories + ->addValue($memory8Gb) + // storages + ->addValue($storage256Gb) + ->addValue($storage512Gb) +; + +$macAir = (new Entity()) + ->setName('MacBook Air') + // colors + ->addValue($colorSilver) + // memories + ->addValue($memory4Gb) + ->addValue($memory8Gb) + // storages + ->addValue($storage128Gb) + ->addValue($storage256Gb) + ->addValue($storage512Gb) +; + +$macPro = (new Entity()) + ->setName('MacBook Pro') + // colors + ->addValue($colorSilver) + // memories + ->addValue($memory8Gb) + ->addValue($memory16Gb) + // storages + ->addValue($storage128Gb) + ->addValue($storage256Gb) + ->addValue($storage512Gb) + ->addValue($storage1Tb) +; +``` UML Diagram ----------- @@ -24,7 +91,23 @@ You can also find these code on `GitHub`_ Test ---- -... +Tests/EntityTest.php + +.. literalinclude:: Tests/EntityTest.php + :language: php + :linenos: + +Tests/AttributeTest.php + +.. literalinclude:: Tests/AttributeTest.php + :language: php + :linenos: + +Tests/ValueTest.php + +.. literalinclude:: Tests/ValueTest.php + :language: php + :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/More/EAV diff --git a/More/EAV/Tests/AttributeTest.php b/More/EAV/Tests/AttributeTest.php new file mode 100644 index 0000000..7a086d3 --- /dev/null +++ b/More/EAV/Tests/AttributeTest.php @@ -0,0 +1,66 @@ +assertInstanceOf('\DesignPatterns\More\EAV\Attribute', $attribute); + } + + /** + * @depends testCreationSuccess + */ + public function testSetGetName() + { + $attribute = new Attribute(); + $attribute->setName('Color'); + + $this->assertEquals('Color', $attribute->getName()); + } + + /** + * @depends testCreationSuccess + */ + public function testAddValue() + { + $attribute = new Attribute(); + $attribute->setName('Color'); + + $values[] = (new Value($attribute))->setName('Silver'); + $values[] = (new Value($attribute))->setName('Gold'); + $values[] = (new Value($attribute))->setName('Space Grey'); + + $this->assertEquals($values, $attribute->getValues()); + } + + /** + * @depends testAddValue + */ + public function testRemoveValue() + { + $values = []; + + $attribute = new Attribute(); + $attribute->setName('Color'); + + $values[] = (new Value($attribute))->setName('Silver'); + $values[] = (new Value($attribute))->setName('Gold'); + $values[] = (new Value($attribute))->setName('Space Grey'); + + $randomIndex = array_rand($values); + $attribute->removeValue($values[$randomIndex]); + unset($values[$randomIndex]); + + $this->assertEquals($values, $attribute->getValues()); + } +} diff --git a/More/EAV/Tests/EntityTest.php b/More/EAV/Tests/EntityTest.php new file mode 100644 index 0000000..5fa47cc --- /dev/null +++ b/More/EAV/Tests/EntityTest.php @@ -0,0 +1,132 @@ +setName($name); + + $this->assertEquals($name, $macBook->getName()); + } + + /** + * @dataProvider valueProvider + * + * @var string $name + * @var array|Value[] $values + */ + public function testAddValue($name, array $values) + { + $macBook = new Entity(); + $macBook->setName($name); + + foreach ($values as $value) { + $macBook->addValue($value); + } + + $this->assertEquals($values, $macBook->getValues()); + } + + /** + * @depends testAddValue + * @dataProvider valueProvider + * + * @var string $name + * @var array|Value[] $values + */ + public function testRemoveValue($name, array $values) + { + $macBook = new Entity(); + $macBook->setName($name); + + foreach ($values as $value) { + $macBook->addValue($value); + } + + $randomIndex = array_rand($values); + $macBook->removeValue($values[$randomIndex]); + unset($values[$randomIndex]); + + $this->assertEquals($values, $macBook->getValues()); + } + + /** + * @return array + */ + public function valueProvider() + { + // color attribute + $color = (new Attribute())->setName('Color'); + // color values + $colorSilver = (new Value($color))->setName('Silver'); + $colorGold = (new Value($color))->setName('Gold'); + $colorSpaceGrey = (new Value($color))->setName('Space Grey'); + + // memory attribute + $memory = (new Attribute())->setName('Memory'); + // memory values + $memory4Gb = (new Value($memory))->setName('4GB'); + $memory8Gb = (new Value($memory))->setName('8GB'); + $memory16Gb = (new Value($memory))->setName('16GB'); + + // storage attribute + $storage = (new Attribute())->setName('Storage'); + // storage values + $storage128Gb = (new Value($storage))->setName('128GB'); + $storage256Gb = (new Value($storage))->setName('256GB'); + $storage512Gb = (new Value($storage))->setName('512GB'); + $storage1Tb = (new Value($storage))->setName('1TB'); + + return [ + [ + 'MacBook', + [ + $colorSilver, + $colorGold, + $colorSpaceGrey, + $memory8Gb, + $storage256Gb, + $storage512Gb, + ], + ], + [ + 'MacBook Air', + [ + $colorSilver, + $memory4Gb, + $memory8Gb, + $storage128Gb, + $storage256Gb, + $storage512Gb, + ], + ], + [ + 'MacBook Pro', + [ + $colorSilver, + $memory8Gb, + $memory16Gb, + $storage128Gb, + $storage256Gb, + $storage512Gb, + $storage1Tb, + ], + ], + ]; + } +} diff --git a/More/EAV/Tests/ValueTest.php b/More/EAV/Tests/ValueTest.php new file mode 100644 index 0000000..0d817ce --- /dev/null +++ b/More/EAV/Tests/ValueTest.php @@ -0,0 +1,59 @@ +assertTrue($isFailure); + } + + public function testCreationSuccessWithAttribute() + { + $attribute = new Attribute(); + $attribute->setName('Color'); + + $value = new Value($attribute); + + $this->assertInstanceOf('\DesignPatterns\More\EAV\Value', $value); + } + + public function testSetGetName() + { + $attribute = new Attribute(); + $attribute->setName('Color'); + + $value = new Value($attribute); + $value->setName('Silver'); + + $this->assertEquals('Silver', $value->getName()); + } + + public function testSetGetAttribute() + { + $attribute = new Attribute(); + $attribute->setName('Color'); + + $value = new Value($attribute); + $value->setName('Silver'); + $this->assertSame($attribute, $value->getAttribute()); + + $value->setAttribute($attribute); + $this->assertSame($attribute, $value->getAttribute()); + } +} diff --git a/More/EAV/Value.php b/More/EAV/Value.php index 9f1d3ae..617afdc 100644 --- a/More/EAV/Value.php +++ b/More/EAV/Value.php @@ -26,6 +26,16 @@ class Value implements ValueInterface $this->attribute = $attribute; } + /** + * @param Attribute $attribute + */ + public function setAttribute(Attribute $attribute) + { + $this->attribute->removeValue($this); // Remove value from current attribute + $attribute->addValue($this); // Add value to new attribute + $this->attribute = $attribute; + } + /** * @return Attribute */ diff --git a/More/EAV/ValueInterface.php b/More/EAV/ValueInterface.php index fee9865..c041835 100644 --- a/More/EAV/ValueInterface.php +++ b/More/EAV/ValueInterface.php @@ -12,6 +12,11 @@ interface ValueInterface */ public function __construct(Attribute $attribute); + /** + * @param Attribute $attribute + */ + public function setAttribute(Attribute $attribute); + /** * @return Attribute */ From eda331e48325715f841cbae15c45a7b72e18a758 Mon Sep 17 00:00:00 2001 From: victor Date: Wed, 19 Aug 2015 17:13:45 +0300 Subject: [PATCH 075/127] Fix tests for PHP 5.3 --- More/EAV/Attribute.php | 2 +- More/EAV/Entity.php | 2 +- More/EAV/Tests/AttributeTest.php | 26 +++++++++---- More/EAV/Tests/EntityTest.php | 67 +++++++++++++++++++------------- 4 files changed, 61 insertions(+), 36 deletions(-) diff --git a/More/EAV/Attribute.php b/More/EAV/Attribute.php index 7103af9..42e9f02 100644 --- a/More/EAV/Attribute.php +++ b/More/EAV/Attribute.php @@ -10,7 +10,7 @@ class Attribute implements ValueAccessInterface /** * @var array|Value[]|ValueInterface[] */ - private $values = []; + private $values = array(); /** * @var string diff --git a/More/EAV/Entity.php b/More/EAV/Entity.php index 5dd7ed1..fc3dc9e 100644 --- a/More/EAV/Entity.php +++ b/More/EAV/Entity.php @@ -10,7 +10,7 @@ class Entity implements ValueAccessInterface /** * @var array|Value[]|ValueInterface[] */ - private $values = []; + private $values = array(); /** * @var string diff --git a/More/EAV/Tests/AttributeTest.php b/More/EAV/Tests/AttributeTest.php index 7a086d3..1561acd 100644 --- a/More/EAV/Tests/AttributeTest.php +++ b/More/EAV/Tests/AttributeTest.php @@ -36,9 +36,15 @@ class AttributeTest extends \PHPUnit_Framework_TestCase $attribute = new Attribute(); $attribute->setName('Color'); - $values[] = (new Value($attribute))->setName('Silver'); - $values[] = (new Value($attribute))->setName('Gold'); - $values[] = (new Value($attribute))->setName('Space Grey'); + $colorSilver = new Value($attribute); + $colorSilver->setName('Silver'); + $values[] = $colorSilver; + $colorGold = new Value($attribute); + $colorGold->setName('Gold'); + $values[] = $colorGold; + $colorSpaceGrey = new Value($attribute); + $colorSpaceGrey->setName('Space Grey'); + $values[] = $colorSpaceGrey; $this->assertEquals($values, $attribute->getValues()); } @@ -48,14 +54,20 @@ class AttributeTest extends \PHPUnit_Framework_TestCase */ public function testRemoveValue() { - $values = []; + $values = array(); $attribute = new Attribute(); $attribute->setName('Color'); - $values[] = (new Value($attribute))->setName('Silver'); - $values[] = (new Value($attribute))->setName('Gold'); - $values[] = (new Value($attribute))->setName('Space Grey'); + $colorSilver = new Value($attribute); + $colorSilver->setName('Silver'); + $values[] = $colorSilver; + $colorGold = new Value($attribute); + $colorGold->setName('Gold'); + $values[] = $colorGold; + $colorSpaceGrey = new Value($attribute); + $colorSpaceGrey->setName('Space Grey'); + $values[] = $colorSpaceGrey; $randomIndex = array_rand($values); $attribute->removeValue($values[$randomIndex]); diff --git a/More/EAV/Tests/EntityTest.php b/More/EAV/Tests/EntityTest.php index 5fa47cc..2e8e58f 100644 --- a/More/EAV/Tests/EntityTest.php +++ b/More/EAV/Tests/EntityTest.php @@ -71,53 +71,66 @@ class EntityTest extends \PHPUnit_Framework_TestCase public function valueProvider() { // color attribute - $color = (new Attribute())->setName('Color'); + $color = new Attribute(); + $color->setName('Color'); // color values - $colorSilver = (new Value($color))->setName('Silver'); - $colorGold = (new Value($color))->setName('Gold'); - $colorSpaceGrey = (new Value($color))->setName('Space Grey'); + $colorSilver = new Value($color); + $colorSilver->setName('Silver'); + $colorGold = new Value($color); + $colorGold->setName('Gold'); + $colorSpaceGrey = new Value($color); + $colorSpaceGrey->setName('Space Grey'); // memory attribute - $memory = (new Attribute())->setName('Memory'); + $memory = new Attribute(); + $memory->setName('Memory'); // memory values - $memory4Gb = (new Value($memory))->setName('4GB'); - $memory8Gb = (new Value($memory))->setName('8GB'); - $memory16Gb = (new Value($memory))->setName('16GB'); + $memory4Gb = new Value($memory); + $memory4Gb->setName('4GB'); + $memory8Gb = new Value($memory); + $memory8Gb->setName('8GB'); + $memory16Gb = new Value($memory); + $memory16Gb->setName('16GB'); // storage attribute - $storage = (new Attribute())->setName('Storage'); + $storage = new Attribute(); + $storage->setName('Storage'); // storage values - $storage128Gb = (new Value($storage))->setName('128GB'); - $storage256Gb = (new Value($storage))->setName('256GB'); - $storage512Gb = (new Value($storage))->setName('512GB'); - $storage1Tb = (new Value($storage))->setName('1TB'); + $storage128Gb = new Value($storage); + $storage128Gb->setName('128GB'); + $storage256Gb = new Value($storage); + $storage256Gb->setName('256GB'); + $storage512Gb = new Value($storage); + $storage512Gb->setName('512GB'); + $storage1Tb = new Value($storage); + $storage1Tb->setName('1TB'); - return [ - [ + return array( + array( 'MacBook', - [ + array( $colorSilver, $colorGold, $colorSpaceGrey, $memory8Gb, $storage256Gb, $storage512Gb, - ], - ], - [ + ), + ), + array( 'MacBook Air', - [ + array( $colorSilver, $memory4Gb, $memory8Gb, $storage128Gb, $storage256Gb, $storage512Gb, - ], - ], - [ + ), + ), + array( 'MacBook Pro', - [ + array( $colorSilver, $memory8Gb, $memory16Gb, @@ -125,8 +138,8 @@ class EntityTest extends \PHPUnit_Framework_TestCase $storage256Gb, $storage512Gb, $storage1Tb, - ], - ], - ]; + ), + ), + ); } } From 4d3b024c71c4b85789d60345c200969a2f057cf1 Mon Sep 17 00:00:00 2001 From: victor Date: Fri, 21 Aug 2015 12:26:43 +0300 Subject: [PATCH 076/127] Add UNL diagram --- More/EAV/uml/EAV.uml | 43 +++ More/EAV/uml/uml.png | Bin 0 -> 28941 bytes More/EAV/uml/uml.svg | 668 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 711 insertions(+) create mode 100644 More/EAV/uml/EAV.uml create mode 100644 More/EAV/uml/uml.png create mode 100644 More/EAV/uml/uml.svg diff --git a/More/EAV/uml/EAV.uml b/More/EAV/uml/EAV.uml new file mode 100644 index 0000000..1b08466 --- /dev/null +++ b/More/EAV/uml/EAV.uml @@ -0,0 +1,43 @@ + + + PHP + \DesignPatterns\More\Delegation\JuniorDeveloper + + \DesignPatterns\More\EAV\Entity + \DesignPatterns\More\EAV\Value + \DesignPatterns\More\EAV\Attribute + \DesignPatterns\More\EAV\ValueAccessInterface + \DesignPatterns\More\EAV\ValueInterface + + + + + + + + + + + + + + + + + + + + + + + \DesignPatterns\More\EAV\ValueAccessInterface + + + Fields + Constants + Constructors + Methods + + private + + diff --git a/More/EAV/uml/uml.png b/More/EAV/uml/uml.png new file mode 100644 index 0000000000000000000000000000000000000000..22e9b774f2849f845006396bd47c5382d16e9175 GIT binary patch literal 28941 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 HFyOxcH6K%v literal 0 HcmV?d00001 diff --git a/More/EAV/uml/uml.svg b/More/EAV/uml/uml.svg new file mode 100644 index 0000000..26ff3cc --- /dev/null +++ b/More/EAV/uml/uml.svg @@ -0,0 +1,668 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + getValues() + + + + + + + + + + addValue(value) + + + + + + + + + + removeValue(value) + + + + + + + + + + + + + ValueAccessInterface + + + ValueAccessInterface + + + + + + + + + + + + + + + + + + + values + + + + + + + + + + name + + + + + + + + + + + + + getValues() + + + + + + + + + + addValue(value) + + + + + + + + + + removeValue(value) + + + + + + + + + + getName() + + + + + + + + + + setName(name) + + + + + + + + + + + + + Attribute + + + Attribute + + + + + + + + + + + + + + + + + + + values + + + + + + + + + + name + + + + + + + + + + + + + getValues() + + + + + + + + + + addValue(value) + + + + + + + + + + removeValue(value) + + + + + + + + + + getName() + + + + + + + + + + setName(name) + + + + + + + + + + + + + Entity + + + Entity + + + + + + + + + + + + + + + + + + + __construct(attribute) + + + + + + + + + + + + + setAttribute(attribute) + + + + + + + + + + getAttribute() + + + + + + + + + + + + + ValueInterface + + + ValueInterface + + + + + + + + + + + + + + + + + + + attribute + + + + + + + + + + name + + + + + + + + + + + + + __construct(attribute) + + + + + + + + + + + + + setAttribute(attribute) + + + + + + + + + + getAttribute() + + + + + + + + + + getName() + + + + + + + + + + setName(name) + + + + + + + + + + + + + Value + + + Value + + + + + + + + + + + + + From 905da079bee9683207b512825a6f9752d17fce12 Mon Sep 17 00:00:00 2001 From: victor Date: Fri, 21 Aug 2015 12:34:29 +0300 Subject: [PATCH 077/127] Add missing sections to README file --- More/EAV/README.rst | 139 +++++++++++++++++++++++-------------------- More/EAV/example.php | 14 ++--- 2 files changed, 82 insertions(+), 71 deletions(-) diff --git a/More/EAV/README.rst b/More/EAV/README.rst index 0a03ad7..b8a8fbe 100644 --- a/More/EAV/README.rst +++ b/More/EAV/README.rst @@ -1,87 +1,97 @@ `Entity-Attribute-Value (EAV)`__ ================================ +The Entity–attribute–value (EAV) pattern in order to implement EAV model with PHP. + Purpose ------- -... +The Entity–attribute–value (EAV) model is a data model to describe entities +where the number of attributes (properties, parameters) that can be used +to describe them is potentially vast, but the number that will actually apply +to a given entity is relatively modest. Examples -------- -``` -use DesignPatterns\More\EAV\Entity; -use DesignPatterns\More\EAV\Attribute; -use DesignPatterns\More\EAV\Value; +Check full work example in `example.php`_ file. -// color attribute -$color = (new Attribute())->setName('Color'); -// color values -$colorSilver = (new Value($color))->setName('Silver'); -$colorGold = (new Value($color))->setName('Gold'); -$colorSpaceGrey = (new Value($color))->setName('Space Grey'); +.. code-block:: php -// memory attribute -$memory = (new Attribute())->setName('Memory'); -// memory values -$memory4Gb = (new Value($memory))->setName('4GB'); -$memory8Gb = (new Value($memory))->setName('8GB'); -$memory16Gb = (new Value($memory))->setName('16GB'); + use DesignPatterns\More\EAV\Entity; + use DesignPatterns\More\EAV\Attribute; + use DesignPatterns\More\EAV\Value; -// storage attribute -$storage = (new Attribute())->setName('Storage'); -// storage values -$storage128Gb = (new Value($storage))->setName('128GB'); -$storage256Gb = (new Value($storage))->setName('256GB'); -$storage512Gb = (new Value($storage))->setName('512GB'); -$storage1Tb = (new Value($storage))->setName('1TB'); + // Create color attribute + $color = (new Attribute())->setName('Color'); + // Create color values + $colorSilver = (new Value($color))->setName('Silver'); + $colorGold = (new Value($color))->setName('Gold'); + $colorSpaceGrey = (new Value($color))->setName('Space Grey'); -// entities -$mac = (new Entity()) - ->setName('MacBook') - // colors - ->addValue($colorSilver) - ->addValue($colorGold) - ->addValue($colorSpaceGrey) - // memories - ->addValue($memory8Gb) - // storages - ->addValue($storage256Gb) - ->addValue($storage512Gb) -; + // Create memory attribute + $memory = (new Attribute())->setName('Memory'); + // Create memory values + $memory4Gb = (new Value($memory))->setName('4GB'); + $memory8Gb = (new Value($memory))->setName('8GB'); + $memory16Gb = (new Value($memory))->setName('16GB'); -$macAir = (new Entity()) - ->setName('MacBook Air') - // colors - ->addValue($colorSilver) - // memories - ->addValue($memory4Gb) - ->addValue($memory8Gb) - // storages - ->addValue($storage128Gb) - ->addValue($storage256Gb) - ->addValue($storage512Gb) -; + // Create storage attribute + $storage = (new Attribute())->setName('Storage'); + // Create storage values + $storage128Gb = (new Value($storage))->setName('128GB'); + $storage256Gb = (new Value($storage))->setName('256GB'); + $storage512Gb = (new Value($storage))->setName('512GB'); + $storage1Tb = (new Value($storage))->setName('1TB'); + + // Create entities with specific values + $mac = (new Entity()) + ->setName('MacBook') + // colors + ->addValue($colorSilver) + ->addValue($colorGold) + ->addValue($colorSpaceGrey) + // memories + ->addValue($memory8Gb) + // storages + ->addValue($storage256Gb) + ->addValue($storage512Gb) + ; + + $macAir = (new Entity()) + ->setName('MacBook Air') + // colors + ->addValue($colorSilver) + // memories + ->addValue($memory4Gb) + ->addValue($memory8Gb) + // storages + ->addValue($storage128Gb) + ->addValue($storage256Gb) + ->addValue($storage512Gb) + ; + + $macPro = (new Entity()) + ->setName('MacBook Pro') + // colors + ->addValue($colorSilver) + // memories + ->addValue($memory8Gb) + ->addValue($memory16Gb) + // storages + ->addValue($storage128Gb) + ->addValue($storage256Gb) + ->addValue($storage512Gb) + ->addValue($storage1Tb) + ; -$macPro = (new Entity()) - ->setName('MacBook Pro') - // colors - ->addValue($colorSilver) - // memories - ->addValue($memory8Gb) - ->addValue($memory16Gb) - // storages - ->addValue($storage128Gb) - ->addValue($storage256Gb) - ->addValue($storage512Gb) - ->addValue($storage1Tb) -; -``` UML Diagram ----------- -... +.. image:: uml/uml.png + :alt: EAV UML Diagram + :align: center Code ---- @@ -110,5 +120,6 @@ Tests/ValueTest.php :linenos: +.. _`example.php`: https://github.com/domnikl/DesignPatternsPHP/tree/master/More/EAV/example.php .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/More/EAV .. __: https://en.wikipedia.org/wiki/Entity–attribute–value_model diff --git a/More/EAV/example.php b/More/EAV/example.php index c69342e..c5bb5c4 100644 --- a/More/EAV/example.php +++ b/More/EAV/example.php @@ -6,29 +6,29 @@ use DesignPatterns\More\EAV\Entity; use DesignPatterns\More\EAV\Attribute; use DesignPatterns\More\EAV\Value; -// color attribute +// Create color attribute $color = (new Attribute())->setName('Color'); -// color values +// Create color values $colorSilver = (new Value($color))->setName('Silver'); $colorGold = (new Value($color))->setName('Gold'); $colorSpaceGrey = (new Value($color))->setName('Space Grey'); -// memory attribute +// Create memory attribute $memory = (new Attribute())->setName('Memory'); -// memory values +// Create memory values $memory4Gb = (new Value($memory))->setName('4GB'); $memory8Gb = (new Value($memory))->setName('8GB'); $memory16Gb = (new Value($memory))->setName('16GB'); -// storage attribute +// Create storage attribute $storage = (new Attribute())->setName('Storage'); -// storage values +// Create storage values $storage128Gb = (new Value($storage))->setName('128GB'); $storage256Gb = (new Value($storage))->setName('256GB'); $storage512Gb = (new Value($storage))->setName('512GB'); $storage1Tb = (new Value($storage))->setName('1TB'); -// entities +// Create entities with specific values $mac = (new Entity()) ->setName('MacBook') // colors From fb8432d5ac26d2cccda45c6bdfe3bc24bdbfc0de Mon Sep 17 00:00:00 2001 From: victor Date: Fri, 21 Aug 2015 12:55:55 +0300 Subject: [PATCH 078/127] Fix PHP 7 tests --- More/EAV/Tests/ValueTest.php | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/More/EAV/Tests/ValueTest.php b/More/EAV/Tests/ValueTest.php index 0d817ce..1b96521 100644 --- a/More/EAV/Tests/ValueTest.php +++ b/More/EAV/Tests/ValueTest.php @@ -10,19 +10,6 @@ use DesignPatterns\More\EAV\Value; */ class ValueTest extends \PHPUnit_Framework_TestCase { - public function testCreationFailureWithoutAttribute() - { - $isFailure = false; - - try { - new Value(); - } catch (\Exception $e) { - $isFailure = true; - } - - $this->assertTrue($isFailure); - } - public function testCreationSuccessWithAttribute() { $attribute = new Attribute(); From c61f84c49fac3f1248db218e6a342460bcca3734 Mon Sep 17 00:00:00 2001 From: Victor Date: Sun, 23 Aug 2015 00:55:42 +0300 Subject: [PATCH 079/127] Fix annotation multiple types --- More/EAV/Attribute.php | 8 ++++---- More/EAV/Entity.php | 8 ++++---- More/EAV/ValueAccessInterface.php | 6 +++--- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/More/EAV/Attribute.php b/More/EAV/Attribute.php index 42e9f02..a136c22 100644 --- a/More/EAV/Attribute.php +++ b/More/EAV/Attribute.php @@ -8,7 +8,7 @@ namespace DesignPatterns\More\EAV; class Attribute implements ValueAccessInterface { /** - * @var array|Value[]|ValueInterface[] + * @var ValueInterface[] */ private $values = array(); @@ -18,7 +18,7 @@ class Attribute implements ValueAccessInterface private $name; /** - * @return array|Value[]|ValueInterface[] + * @return ValueInterface[] */ public function getValues() { @@ -26,7 +26,7 @@ class Attribute implements ValueAccessInterface } /** - * @param Value|ValueInterface $value + * @param ValueInterface $value * @return $this */ public function addValue(ValueInterface $value) @@ -38,7 +38,7 @@ class Attribute implements ValueAccessInterface } /** - * @param Value|ValueInterface $value + * @param ValueInterface $value * @return $this */ public function removeValue(ValueInterface $value) diff --git a/More/EAV/Entity.php b/More/EAV/Entity.php index fc3dc9e..58a88e5 100644 --- a/More/EAV/Entity.php +++ b/More/EAV/Entity.php @@ -8,7 +8,7 @@ namespace DesignPatterns\More\EAV; class Entity implements ValueAccessInterface { /** - * @var array|Value[]|ValueInterface[] + * @var ValueInterface[] */ private $values = array(); @@ -18,7 +18,7 @@ class Entity implements ValueAccessInterface private $name; /** - * @return array|Value[]|ValueInterface[] + * @return ValueInterface[] */ public function getValues() { @@ -26,7 +26,7 @@ class Entity implements ValueAccessInterface } /** - * @param Value|ValueInterface $value + * @param ValueInterface $value * @return $this */ public function addValue(ValueInterface $value) @@ -38,7 +38,7 @@ class Entity implements ValueAccessInterface } /** - * @param Value|ValueInterface $value + * @param ValueInterface $value * @return $this */ public function removeValue(ValueInterface $value) diff --git a/More/EAV/ValueAccessInterface.php b/More/EAV/ValueAccessInterface.php index ccb4725..46b7f9f 100644 --- a/More/EAV/ValueAccessInterface.php +++ b/More/EAV/ValueAccessInterface.php @@ -8,17 +8,17 @@ namespace DesignPatterns\More\EAV; interface ValueAccessInterface { /** - * @return Value[]|ValueInterface[]|array + * @return ValueInterface[] */ public function getValues(); /** - * @param Value|ValueInterface $value + * @param ValueInterface $value */ public function addValue(ValueInterface $value); /** - * @param Value|ValueInterface $value + * @param ValueInterface $value */ public function removeValue(ValueInterface $value); } From cf0a0b353b6500867ba5f9bdc6f4be9e67621714 Mon Sep 17 00:00:00 2001 From: Victor Date: Sun, 23 Aug 2015 01:03:00 +0300 Subject: [PATCH 080/127] Fix annotation multiple types for tests --- More/EAV/Tests/EntityTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/More/EAV/Tests/EntityTest.php b/More/EAV/Tests/EntityTest.php index 2e8e58f..ecbd3a2 100644 --- a/More/EAV/Tests/EntityTest.php +++ b/More/EAV/Tests/EntityTest.php @@ -28,7 +28,7 @@ class EntityTest extends \PHPUnit_Framework_TestCase * @dataProvider valueProvider * * @var string $name - * @var array|Value[] $values + * @var Value[] $values */ public function testAddValue($name, array $values) { @@ -47,7 +47,7 @@ class EntityTest extends \PHPUnit_Framework_TestCase * @dataProvider valueProvider * * @var string $name - * @var array|Value[] $values + * @var Value[] $values */ public function testRemoveValue($name, array $values) { From 47c323d36ba0693e870c6f43c384cffec9453baf Mon Sep 17 00:00:00 2001 From: victor Date: Tue, 25 Aug 2015 10:08:49 +0300 Subject: [PATCH 081/127] Simplify tests: Avoid to remove random value --- More/EAV/Tests/AttributeTest.php | 11 ++--------- More/EAV/Tests/EntityTest.php | 5 ++--- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/More/EAV/Tests/AttributeTest.php b/More/EAV/Tests/AttributeTest.php index 1561acd..c95cdad 100644 --- a/More/EAV/Tests/AttributeTest.php +++ b/More/EAV/Tests/AttributeTest.php @@ -42,9 +42,6 @@ class AttributeTest extends \PHPUnit_Framework_TestCase $colorGold = new Value($attribute); $colorGold->setName('Gold'); $values[] = $colorGold; - $colorSpaceGrey = new Value($attribute); - $colorSpaceGrey->setName('Space Grey'); - $values[] = $colorSpaceGrey; $this->assertEquals($values, $attribute->getValues()); } @@ -65,13 +62,9 @@ class AttributeTest extends \PHPUnit_Framework_TestCase $colorGold = new Value($attribute); $colorGold->setName('Gold'); $values[] = $colorGold; - $colorSpaceGrey = new Value($attribute); - $colorSpaceGrey->setName('Space Grey'); - $values[] = $colorSpaceGrey; - $randomIndex = array_rand($values); - $attribute->removeValue($values[$randomIndex]); - unset($values[$randomIndex]); + $attribute->removeValue($values[0]); + unset($values[0]); $this->assertEquals($values, $attribute->getValues()); } diff --git a/More/EAV/Tests/EntityTest.php b/More/EAV/Tests/EntityTest.php index ecbd3a2..bb88c0f 100644 --- a/More/EAV/Tests/EntityTest.php +++ b/More/EAV/Tests/EntityTest.php @@ -58,9 +58,8 @@ class EntityTest extends \PHPUnit_Framework_TestCase $macBook->addValue($value); } - $randomIndex = array_rand($values); - $macBook->removeValue($values[$randomIndex]); - unset($values[$randomIndex]); + $macBook->removeValue($values[0]); + unset($values[0]); $this->assertEquals($values, $macBook->getValues()); } From a2d372d4bbf35932f29f8a719254ad83393d838b Mon Sep 17 00:00:00 2001 From: victor Date: Tue, 25 Aug 2015 10:32:12 +0300 Subject: [PATCH 082/127] Refactor with SplObjectStorage --- More/EAV/Attribute.php | 24 +++++++++++++++--------- More/EAV/Entity.php | 24 +++++++++++++++--------- More/EAV/Tests/AttributeTest.php | 15 +++++---------- More/EAV/Tests/EntityTest.php | 9 +++++---- More/EAV/ValueAccessInterface.php | 2 +- 5 files changed, 41 insertions(+), 33 deletions(-) diff --git a/More/EAV/Attribute.php b/More/EAV/Attribute.php index a136c22..7a1a88e 100644 --- a/More/EAV/Attribute.php +++ b/More/EAV/Attribute.php @@ -2,23 +2,30 @@ namespace DesignPatterns\More\EAV; +use SplObjectStorage; + /** * Class Attribute */ class Attribute implements ValueAccessInterface { /** - * @var ValueInterface[] + * @var SplObjectStorage */ - private $values = array(); + private $values; /** * @var string */ private $name; + public function __construct() + { + $this->values = new SplObjectStorage(); + } + /** - * @return ValueInterface[] + * @return SplObjectStorage */ public function getValues() { @@ -31,8 +38,9 @@ class Attribute implements ValueAccessInterface */ public function addValue(ValueInterface $value) { - // @TODO I think the $value should be checked for uniqueness first to avoid duplication in array. - $this->values[] = $value; + if (!$this->values->contains($value)) { + $this->values->attach($value); + } return $this; } @@ -43,10 +51,8 @@ class Attribute implements ValueAccessInterface */ public function removeValue(ValueInterface $value) { - $index = array_search($value, $this->values, true); - - if (false !== $index) { - unset($this->values[$index]); + if ($this->values->contains($value)) { + $this->values->detach($value); } return $this; diff --git a/More/EAV/Entity.php b/More/EAV/Entity.php index 58a88e5..e92444e 100644 --- a/More/EAV/Entity.php +++ b/More/EAV/Entity.php @@ -2,23 +2,30 @@ namespace DesignPatterns\More\EAV; +use SplObjectStorage; + /** * Class Entity */ class Entity implements ValueAccessInterface { /** - * @var ValueInterface[] + * @var SplObjectStorage */ - private $values = array(); + private $values; /** * @var string */ private $name; + public function __construct() + { + $this->values = new SplObjectStorage(); + } + /** - * @return ValueInterface[] + * @return SplObjectStorage */ public function getValues() { @@ -31,8 +38,9 @@ class Entity implements ValueAccessInterface */ public function addValue(ValueInterface $value) { - // @TODO I think the $value should be checked for uniqueness first to avoid duplication in array. - $this->values[] = $value; + if (!$this->values->contains($value)) { + $this->values->attach($value); + } return $this; } @@ -43,10 +51,8 @@ class Entity implements ValueAccessInterface */ public function removeValue(ValueInterface $value) { - $index = array_search($value, $this->values, true); - - if (false !== $index) { - unset($this->values[$index]); + if ($this->values->contains($value)) { + $this->values->detach($value); } return $this; diff --git a/More/EAV/Tests/AttributeTest.php b/More/EAV/Tests/AttributeTest.php index c95cdad..7e7efec 100644 --- a/More/EAV/Tests/AttributeTest.php +++ b/More/EAV/Tests/AttributeTest.php @@ -38,12 +38,11 @@ class AttributeTest extends \PHPUnit_Framework_TestCase $colorSilver = new Value($attribute); $colorSilver->setName('Silver'); - $values[] = $colorSilver; $colorGold = new Value($attribute); $colorGold->setName('Gold'); - $values[] = $colorGold; - $this->assertEquals($values, $attribute->getValues()); + $this->assertTrue($attribute->getValues()->contains($colorSilver)); + $this->assertTrue($attribute->getValues()->contains($colorGold)); } /** @@ -51,21 +50,17 @@ class AttributeTest extends \PHPUnit_Framework_TestCase */ public function testRemoveValue() { - $values = array(); - $attribute = new Attribute(); $attribute->setName('Color'); $colorSilver = new Value($attribute); $colorSilver->setName('Silver'); - $values[] = $colorSilver; $colorGold = new Value($attribute); $colorGold->setName('Gold'); - $values[] = $colorGold; - $attribute->removeValue($values[0]); - unset($values[0]); + $attribute->removeValue($colorSilver); - $this->assertEquals($values, $attribute->getValues()); + $this->assertFalse($attribute->getValues()->contains($colorSilver)); + $this->assertTrue($attribute->getValues()->contains($colorGold)); } } diff --git a/More/EAV/Tests/EntityTest.php b/More/EAV/Tests/EntityTest.php index bb88c0f..42c10f3 100644 --- a/More/EAV/Tests/EntityTest.php +++ b/More/EAV/Tests/EntityTest.php @@ -37,9 +37,10 @@ class EntityTest extends \PHPUnit_Framework_TestCase foreach ($values as $value) { $macBook->addValue($value); + $this->assertTrue($macBook->getValues()->contains($value)); } - $this->assertEquals($values, $macBook->getValues()); + $this->assertCount(count($values), $macBook->getValues()); } /** @@ -57,11 +58,11 @@ class EntityTest extends \PHPUnit_Framework_TestCase foreach ($values as $value) { $macBook->addValue($value); } - $macBook->removeValue($values[0]); - unset($values[0]); - $this->assertEquals($values, $macBook->getValues()); + $this->assertFalse($macBook->getValues()->contains($values[0])); + unset($values[0]); + $this->assertCount(count($values), $macBook->getValues()); } /** diff --git a/More/EAV/ValueAccessInterface.php b/More/EAV/ValueAccessInterface.php index 46b7f9f..27820a8 100644 --- a/More/EAV/ValueAccessInterface.php +++ b/More/EAV/ValueAccessInterface.php @@ -8,7 +8,7 @@ namespace DesignPatterns\More\EAV; interface ValueAccessInterface { /** - * @return ValueInterface[] + * @return \SplObjectStorage */ public function getValues(); From 4babc672ae1b21e3464c989afe1919aef89fe6ed Mon Sep 17 00:00:00 2001 From: victor Date: Thu, 27 Aug 2015 13:19:48 +0300 Subject: [PATCH 083/127] Update PHPUnit with dependencies --- composer.json | 2 +- composer.lock | 143 +++++++++++++++++++++++++------------------------- 2 files changed, 73 insertions(+), 72 deletions(-) diff --git a/composer.json b/composer.json index a754501..230ea33 100644 --- a/composer.json +++ b/composer.json @@ -9,7 +9,7 @@ ], "minimum-stability": "stable", "require-dev": { - "phpunit/phpunit": "4.6.*", + "phpunit/phpunit": "~4.6", "squizlabs/php_codesniffer": "1.5.*" }, "autoload": { diff --git a/composer.lock b/composer.lock index a9fa4ad..aac9505 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "fd9fc5e6da0104ab5a4bd03fcf53f73a", + "hash": "b2d8b0e179e33882664013cfe68f65f8", "packages": [], "packages-dev": [ { @@ -112,16 +112,16 @@ }, { "name": "phpspec/prophecy", - "version": "v1.4.1", + "version": "v1.5.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373" + "reference": "4745ded9307786b730d7a60df5cb5a6c43cf95f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373", - "reference": "3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4745ded9307786b730d7a60df5cb5a6c43cf95f7", + "reference": "4745ded9307786b730d7a60df5cb5a6c43cf95f7", "shasum": "" }, "require": { @@ -168,20 +168,20 @@ "spy", "stub" ], - "time": "2015-04-27 22:15:08" + "time": "2015-08-13 10:07:40" }, { "name": "phpunit/php-code-coverage", - "version": "2.1.8", + "version": "2.2.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "6044546998c7627ab997501a3d0db972b3db9790" + "reference": "2d7c03c0e4e080901b8f33b2897b0577be18a13c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6044546998c7627ab997501a3d0db972b3db9790", - "reference": "6044546998c7627ab997501a3d0db972b3db9790", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2d7c03c0e4e080901b8f33b2897b0577be18a13c", + "reference": "2d7c03c0e4e080901b8f33b2897b0577be18a13c", "shasum": "" }, "require": { @@ -189,7 +189,7 @@ "phpunit/php-file-iterator": "~1.3", "phpunit/php-text-template": "~1.2", "phpunit/php-token-stream": "~1.3", - "sebastian/environment": "~1.0", + "sebastian/environment": "^1.3.2", "sebastian/version": "~1.0" }, "require-dev": { @@ -204,7 +204,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1.x-dev" + "dev-master": "2.2.x-dev" } }, "autoload": { @@ -230,20 +230,20 @@ "testing", "xunit" ], - "time": "2015-07-13 11:25:58" + "time": "2015-08-04 03:42:39" }, { "name": "phpunit/php-file-iterator", - "version": "1.4.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "a923bb15680d0089e2316f7a4af8f437046e96bb" + "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a923bb15680d0089e2316f7a4af8f437046e96bb", - "reference": "a923bb15680d0089e2316f7a4af8f437046e96bb", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", + "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", "shasum": "" }, "require": { @@ -277,7 +277,7 @@ "filesystem", "iterator" ], - "time": "2015-04-02 05:19:05" + "time": "2015-06-21 13:08:43" }, { "name": "phpunit/php-text-template", @@ -322,16 +322,16 @@ }, { "name": "phpunit/php-timer", - "version": "1.0.6", + "version": "1.0.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "83fe1bdc5d47658b727595c14da140da92b3d66d" + "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/83fe1bdc5d47658b727595c14da140da92b3d66d", - "reference": "83fe1bdc5d47658b727595c14da140da92b3d66d", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3e82f4e9fc92665fafd9157568e4dcb01d014e5b", + "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b", "shasum": "" }, "require": { @@ -359,20 +359,20 @@ "keywords": [ "timer" ], - "time": "2015-06-13 07:35:30" + "time": "2015-06-21 08:01:12" }, { "name": "phpunit/php-token-stream", - "version": "1.4.3", + "version": "1.4.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "7a9b0969488c3c54fd62b4d504b3ec758fd005d9" + "reference": "3ab72c62e550370a6cd5dc873e1a04ab57562f5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/7a9b0969488c3c54fd62b4d504b3ec758fd005d9", - "reference": "7a9b0969488c3c54fd62b4d504b3ec758fd005d9", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3ab72c62e550370a6cd5dc873e1a04ab57562f5b", + "reference": "3ab72c62e550370a6cd5dc873e1a04ab57562f5b", "shasum": "" }, "require": { @@ -408,20 +408,20 @@ "keywords": [ "tokenizer" ], - "time": "2015-06-19 03:43:16" + "time": "2015-08-16 08:51:00" }, { "name": "phpunit/phpunit", - "version": "4.6.10", + "version": "4.8.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "7b5fe98b28302a8b25693b2298bca74463336975" + "reference": "2246830f4a1a551c67933e4171bf2126dc29d357" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/7b5fe98b28302a8b25693b2298bca74463336975", - "reference": "7b5fe98b28302a8b25693b2298bca74463336975", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2246830f4a1a551c67933e4171bf2126dc29d357", + "reference": "2246830f4a1a551c67933e4171bf2126dc29d357", "shasum": "" }, "require": { @@ -431,15 +431,15 @@ "ext-reflection": "*", "ext-spl": "*", "php": ">=5.3.3", - "phpspec/prophecy": "~1.3,>=1.3.1", - "phpunit/php-code-coverage": "~2.0,>=2.0.11", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~2.1", "phpunit/php-file-iterator": "~1.4", "phpunit/php-text-template": "~1.2", - "phpunit/php-timer": "~1.0", + "phpunit/php-timer": ">=1.0.6", "phpunit/phpunit-mock-objects": "~2.3", "sebastian/comparator": "~1.1", "sebastian/diff": "~1.2", - "sebastian/environment": "~1.2", + "sebastian/environment": "~1.3", "sebastian/exporter": "~1.2", "sebastian/global-state": "~1.0", "sebastian/version": "~1.0", @@ -454,7 +454,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.6.x-dev" + "dev-master": "4.8.x-dev" } }, "autoload": { @@ -480,26 +480,27 @@ "testing", "xunit" ], - "time": "2015-06-03 05:03:30" + "time": "2015-08-24 04:09:38" }, { "name": "phpunit/phpunit-mock-objects", - "version": "2.3.5", + "version": "2.3.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "1c330b1b6e1ea8fd15f2fbea46770576e366855c" + "reference": "5e2645ad49d196e020b85598d7c97e482725786a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/1c330b1b6e1ea8fd15f2fbea46770576e366855c", - "reference": "1c330b1b6e1ea8fd15f2fbea46770576e366855c", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/5e2645ad49d196e020b85598d7c97e482725786a", + "reference": "5e2645ad49d196e020b85598d7c97e482725786a", "shasum": "" }, "require": { - "doctrine/instantiator": "~1.0,>=1.0.2", + "doctrine/instantiator": "^1.0.2", "php": ">=5.3.3", - "phpunit/php-text-template": "~1.2" + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" }, "require-dev": { "phpunit/phpunit": "~4.4" @@ -535,20 +536,20 @@ "mock", "xunit" ], - "time": "2015-07-04 05:41:32" + "time": "2015-08-19 09:14:08" }, { "name": "sebastian/comparator", - "version": "1.1.1", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "1dd8869519a225f7f2b9eb663e225298fade819e" + "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dd8869519a225f7f2b9eb663e225298fade819e", - "reference": "1dd8869519a225f7f2b9eb663e225298fade819e", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", + "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", "shasum": "" }, "require": { @@ -562,7 +563,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { @@ -599,7 +600,7 @@ "compare", "equality" ], - "time": "2015-01-29 16:28:08" + "time": "2015-07-26 15:48:44" }, { "name": "sebastian/diff", @@ -655,16 +656,16 @@ }, { "name": "sebastian/environment", - "version": "1.2.2", + "version": "1.3.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e" + "reference": "6324c907ce7a52478eeeaede764f48733ef5ae44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5a8c7d31914337b69923db26c4221b81ff5a196e", - "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6324c907ce7a52478eeeaede764f48733ef5ae44", + "reference": "6324c907ce7a52478eeeaede764f48733ef5ae44", "shasum": "" }, "require": { @@ -701,20 +702,20 @@ "environment", "hhvm" ], - "time": "2015-01-01 10:01:08" + "time": "2015-08-03 06:14:51" }, { "name": "sebastian/exporter", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "84839970d05254c73cde183a721c7af13aede943" + "reference": "7ae5513327cb536431847bcc0c10edba2701064e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/84839970d05254c73cde183a721c7af13aede943", - "reference": "84839970d05254c73cde183a721c7af13aede943", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/7ae5513327cb536431847bcc0c10edba2701064e", + "reference": "7ae5513327cb536431847bcc0c10edba2701064e", "shasum": "" }, "require": { @@ -767,7 +768,7 @@ "export", "exporter" ], - "time": "2015-01-27 07:23:06" + "time": "2015-06-21 07:55:53" }, { "name": "sebastian/global-state", @@ -822,16 +823,16 @@ }, { "name": "sebastian/recursion-context", - "version": "1.0.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "3989662bbb30a29d20d9faa04a846af79b276252" + "reference": "994d4a811bafe801fb06dccbee797863ba2792ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/3989662bbb30a29d20d9faa04a846af79b276252", - "reference": "3989662bbb30a29d20d9faa04a846af79b276252", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/994d4a811bafe801fb06dccbee797863ba2792ba", + "reference": "994d4a811bafe801fb06dccbee797863ba2792ba", "shasum": "" }, "require": { @@ -871,7 +872,7 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2015-01-24 09:48:32" + "time": "2015-06-21 08:04:50" }, { "name": "sebastian/version", @@ -985,16 +986,16 @@ }, { "name": "symfony/yaml", - "version": "v2.7.2", + "version": "v2.7.3", "source": { "type": "git", "url": "https://github.com/symfony/Yaml.git", - "reference": "4bfbe0ed3909bfddd75b70c094391ec1f142f860" + "reference": "71340e996171474a53f3d29111d046be4ad8a0ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Yaml/zipball/4bfbe0ed3909bfddd75b70c094391ec1f142f860", - "reference": "4bfbe0ed3909bfddd75b70c094391ec1f142f860", + "url": "https://api.github.com/repos/symfony/Yaml/zipball/71340e996171474a53f3d29111d046be4ad8a0ff", + "reference": "71340e996171474a53f3d29111d046be4ad8a0ff", "shasum": "" }, "require": { @@ -1030,7 +1031,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2015-07-01 11:25:50" + "time": "2015-07-28 14:07:07" } ], "aliases": [], From df621eeeea66021d8855da0f8e1c27700ab6aa3e Mon Sep 17 00:00:00 2001 From: victor Date: Thu, 27 Aug 2015 14:51:46 +0300 Subject: [PATCH 084/127] Fix expected exception test for PHP-7 --- Structural/Decorator/Tests/DecoratorTest.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Structural/Decorator/Tests/DecoratorTest.php b/Structural/Decorator/Tests/DecoratorTest.php index 1789870..437f068 100644 --- a/Structural/Decorator/Tests/DecoratorTest.php +++ b/Structural/Decorator/Tests/DecoratorTest.php @@ -50,6 +50,21 @@ class DecoratorTest extends \PHPUnit_Framework_TestCase * @expectedException \PHPUnit_Framework_Error */ public function testDecoratorTypeHinted() + { + if (version_compare(PHP_VERSION, '7', '>=')) { + throw new \PHPUnit_Framework_Error('Skip test for PHP 7', 0, __FILE__, __LINE__); + } + + $this->getMockForAbstractClass('DesignPatterns\Structural\Decorator\Decorator', array(new \stdClass())); + } + + /** + * Second key-point of this pattern : the decorator is type-hinted + * + * @requires PHP 7 + * @expectedException TypeError + */ + public function testDecoratorTypeHintedForPhp7() { $this->getMockForAbstractClass('DesignPatterns\Structural\Decorator\Decorator', array(new \stdClass())); } From c6f9dccff1dc1dab3ffb018882932efcaef020d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nils=20R=C3=BCckmann?= Date: Mon, 7 Sep 2015 02:17:17 +0200 Subject: [PATCH 085/127] Changes to take care of unwanted (negative) indices --- Behavioral/Iterator/BookList.php | 2 +- Behavioral/Iterator/BookListIterator.php | 2 +- Behavioral/Iterator/BookListReverseIterator.php | 11 ++++++----- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/Behavioral/Iterator/BookList.php b/Behavioral/Iterator/BookList.php index 6fcf265..9c0b9d4 100644 --- a/Behavioral/Iterator/BookList.php +++ b/Behavioral/Iterator/BookList.php @@ -9,7 +9,7 @@ class BookList implements \Countable public function getBook($bookNumberToGet) { - if ((int)$bookNumberToGet <= $this->count()) { + if (isset($this->books[$bookNumberToGet])) { return $this->books[$bookNumberToGet]; } diff --git a/Behavioral/Iterator/BookListIterator.php b/Behavioral/Iterator/BookListIterator.php index bc15ffb..aff7e46 100644 --- a/Behavioral/Iterator/BookListIterator.php +++ b/Behavioral/Iterator/BookListIterator.php @@ -61,7 +61,7 @@ class BookListIterator implements \Iterator */ public function valid() { - return $this->currentBook < $this->bookList->count(); + return null !== $this->bookList->getBook($this->currentBook); } /** diff --git a/Behavioral/Iterator/BookListReverseIterator.php b/Behavioral/Iterator/BookListReverseIterator.php index 973bd0b..5ab2be9 100644 --- a/Behavioral/Iterator/BookListReverseIterator.php +++ b/Behavioral/Iterator/BookListReverseIterator.php @@ -11,13 +11,14 @@ class BookListReverseIterator extends BookListIterator $this->currentBook = $this->bookList->count() - 1; } + /** + * (PHP 5 >= 5.0.0)
+ * Move forward to next element + * @link http://php.net/manual/en/iterator.next.php + * @return void Any returned value is ignored. + */ public function next() { $this->currentBook--; } - - public function valid() - { - return 0 <= $this->currentBook; - } } From 94381601a4e2a78ca7d6b3fd5a4338b105b39fb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Gonz=C3=A1lez=20Cervi=C3=B1o?= Date: Mon, 7 Sep 2015 16:58:23 +0200 Subject: [PATCH 086/127] spanish translation --- locale/es/LC_MESSAGES/README.po | 41 +++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/locale/es/LC_MESSAGES/README.po b/locale/es/LC_MESSAGES/README.po index 3a26db2..52828ee 100644 --- a/locale/es/LC_MESSAGES/README.po +++ b/locale/es/LC_MESSAGES/README.po @@ -21,28 +21,33 @@ msgid "" " implement them in PHP. Every pattern has a small list of examples (most of " "them from Zend Framework, Symfony2 or Doctrine2 as I'm most familiar with " "this software)." -msgstr "" +msgstr "Esta es una colleción de los conocidos como `patrones de diseño`_ y algunos ejemplos de codigo sobre como " +" implementarlos en PHP. Cada patron tiene una pequeña lista de ejemplos ( la mayoría de " +" ellos de Zend Framework, Symfony2 o Doctrine2 ya que estoy más familiarizado con ellos )" #: ../../README.rst:16 msgid "" "I think the problem with patterns is that often people do know them but " "don't know when to apply which." -msgstr "" +msgstr "Yo creo que el problema con los patrones es que con frecuencia la gente los conoce, pero" +"no saben cuando aplicar cada uno" #: ../../README.rst:20 msgid "Patterns" -msgstr "" +msgstr "Patrones" #: ../../README.rst:22 msgid "" "The patterns can be structured in roughly three different categories. Please" " click on **the title of every pattern's page** for a full explanation of " "the pattern on Wikipedia." -msgstr "" +msgstr "Los patrones pueden agruparse en aproximadamente tres categorías diferentes. Por favor " +" pincha en **el título de cada pagina de patrón** para ver la explicación completa " +" del patron en la wikipedia." #: ../../README.rst:35 msgid "Contribute" -msgstr "" +msgstr "Contribuir" #: ../../README.rst:37 msgid "" @@ -51,19 +56,22 @@ msgid "" "quality, please check your code using `PHP CodeSniffer`_ against `PSR2 " "standard`_ using ``./vendor/bin/phpcs -p --standard=PSR2 --ignore=vendor " ".``." -msgstr "" +msgstr "Por favor tomate la libertad de copiar y extender o añadir tus propios ejemplos y" +"enviar peticiones para añadir tus cambios al repositorio principal. Para establecer una calidad de código " +" consistente, por favor revisa que tu codigo usa `PHP CodeSniffer` con el `PSR2 standard`_ " +"utilizando ``./vendor/bin/phpcs -p --standard=PSR2 --ignore=vendor " #: ../../README.rst:44 msgid "License" -msgstr "" +msgstr "Licencia" #: ../../README.rst:46 msgid "(The MIT License)" -msgstr "" +msgstr "(La licencia MIT)" #: ../../README.rst:48 msgid "Copyright (c) 2014 `Dominik Liebler`_ and `contributors`_" -msgstr "" +msgstr "Copyright (c) 2014 `Dominik Liebler`_ and `contributors`_" #: ../../README.rst:50 msgid "" @@ -74,12 +82,20 @@ msgid "" "sell copies of the Software, and to permit persons to whom the Software is " "furnished to do so, subject to the following conditions:" msgstr "" +"Permission is hereby granted, free of charge, to any person obtaining a copy" +" of this software and associated documentation files (the 'Software'), to " +"deal in the Software without restriction, including without limitation the " +"rights to use, copy, modify, merge, publish, distribute, sublicense, and/or " +"sell copies of the Software, and to permit persons to whom the Software is " +"furnished to do so, subject to the following conditions:" #: ../../README.rst:58 msgid "" "The above copyright notice and this permission notice shall be included in " "all copies or substantial portions of the Software." msgstr "" +"The above copyright notice and this permission notice shall be included in " +"all copies or substantial portions of the Software." #: ../../README.rst:61 msgid "" @@ -91,3 +107,10 @@ msgid "" "FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS" " IN THE SOFTWARE." msgstr "" +"THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR " +"IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, " +"FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE " +"AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER " +"LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING " +"FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS" +" IN THE SOFTWARE." From 5d11bc5a87c45e4b211d2420eda7b18e457ea624 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=93=D0=BB?= =?UTF-8?q?=D0=BE=D1=82=D0=BE=D0=B2?= Date: Sat, 30 May 2015 00:04:55 +0300 Subject: [PATCH 087/127] Memento. Note: not equals to English version! --- Behavioral/Memento/README.rst | 6 +- .../LC_MESSAGES/Behavioral/Memento/README.po | 62 ++++++++++++++----- 2 files changed, 49 insertions(+), 19 deletions(-) diff --git a/Behavioral/Memento/README.rst b/Behavioral/Memento/README.rst index 2cbc555..911e30e 100644 --- a/Behavioral/Memento/README.rst +++ b/Behavioral/Memento/README.rst @@ -4,9 +4,9 @@ Purpose ------- -It provides the ability to restore an object to its previous state (undo +It provides the ability to restore an object to it's previous state (undo via rollback) or to gain access to state of the object, without revealing -its implementation (ie, the object is not required to have a functional +it's implementation (i.e., the object is not required to have a functional for return the current state). The memento pattern is implemented with three objects: the Originator, a @@ -14,7 +14,7 @@ Caretaker and a Memento. Memento – an object that *contains a concrete unique snapshot of state* of any object or resource: string, number, array, an instance of class and so on. -The uniqueness in this case not imply the prohibition existence of similar +The uniqueness in this case does not imply the prohibition existence of similar states in different snapshots. That means the state can be extracted as the independent clone. Any object stored in the Memento should be *a full copy of the original object rather than a reference* to the original diff --git a/locale/ru/LC_MESSAGES/Behavioral/Memento/README.po b/locale/ru/LC_MESSAGES/Behavioral/Memento/README.po index 913069a..146f4f5 100644 --- a/locale/ru/LC_MESSAGES/Behavioral/Memento/README.po +++ b/locale/ru/LC_MESSAGES/Behavioral/Memento/README.po @@ -1,29 +1,32 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-05-30 01:42+0300\n" +"Last-Translator: Eugene Glotov \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" #: ../../Behavioral/Memento/README.rst:2 msgid "`Memento`__" -msgstr "" +msgstr "`Хранитель`__" #: ../../Behavioral/Memento/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Назначение" #: ../../Behavioral/Memento/README.rst:7 msgid "" "Provide the ability to restore an object to its previous state (undo via " "rollback)." msgstr "" +"Предоставляет возможность восстановить объект в его предыдущем состоянии или " +"получить доступ к состоянию объекта, не раскрывая его реализацию (т.е. сам " +"объект не обязан иметь функционал возврата текущего состояния)." #: ../../Behavioral/Memento/README.rst:10 msgid "" @@ -39,47 +42,74 @@ msgid "" "other objects or resources - the memento pattern operates on a single " "object." msgstr "" +"Паттерн «Хранитель» реализуется тремя объектами: Создатель, Опекун и " +"Хранитель.\n" +"\n" +"Хранитель — объект, который *хранит конкретный уникальный слепок состояния* " +"любого объекта или ресурса: строка, число, массив, экземпляр класса и так " +"далее. Уникальность в данном случае подразумевает не запрет существования " +"одинаковых состояний в слепках, а то, что состояние можно извлечь в виде " +"независимого клона. Это значит, объект, сохраняемый в Хранитель, должен *быть " +"полной копией исходного объекта а не ссылкой* на исходный объект. Сам объект " +"Хранитель является «непрозрачным объектом» (тот, который никто не может и не " +"должен изменять).\n" +"\n" +"Создатель — это объект, который *содержит в себе актуальное состояние внешнего " +"объекта строго заданного типа* и умеет создать уникальную копию этого " +"состояния, возвращая её обёрнутую в Хранитель. Создатель не знает истории " +"изменений. Создателю можно принудительно установить конкретное состояние " +"извне, которое будет считаться актуальным. Создатель должен позаботиться, " +"чтобы это состояние соответствовало типу объекта, с которым ему разрешено " +"работать. Создатель может (но не обязан) иметь любые методы, но они *не могут " +"менять сохранённое состояние объекта*.\n" +"\n" +"Опекун *управляет историей слепков состояний*. Он может вносить изменения в " +"объект, принимать решение о сохранении состояния внешнего объекта в Создателе, " +"требовать от Создателя слепок текущего состояния, или привести состояние " +"Создателя в соответствие состоянию какого-то слепка из истории." #: ../../Behavioral/Memento/README.rst:23 msgid "Examples" -msgstr "" +msgstr "Примеры" #: ../../Behavioral/Memento/README.rst:25 msgid "The seed of a pseudorandom number generator" msgstr "" +"`Семя `_ псевдослучайного генератора " +"чисел." #: ../../Behavioral/Memento/README.rst:26 msgid "The state in a finite state machine" -msgstr "" +msgstr "Состояние конечного автомата" #: ../../Behavioral/Memento/README.rst:29 msgid "UML Diagram" -msgstr "" +msgstr "UML Диаграмма" #: ../../Behavioral/Memento/README.rst:36 msgid "Code" -msgstr "" +msgstr "Код" #: ../../Behavioral/Memento/README.rst:38 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Behavioral/Memento/README.rst:40 msgid "Memento.php" -msgstr "" +msgstr "Memento.php" #: ../../Behavioral/Memento/README.rst:46 msgid "Originator.php" -msgstr "" +msgstr "Originator.php" #: ../../Behavioral/Memento/README.rst:52 msgid "Caretaker.php" -msgstr "" +msgstr "Caretaker.php" #: ../../Behavioral/Memento/README.rst:59 msgid "Test" -msgstr "" +msgstr "Тест" #: ../../Behavioral/Memento/README.rst:61 msgid "Tests/MementoTest.php" -msgstr "" +msgstr "Tests/MementoTest.php" From 274d7b2d7a5a76671ff7f257cd330dd3c377a18d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nils=20R=C3=BCckmann?= Date: Tue, 8 Sep 2015 23:55:13 +0200 Subject: [PATCH 088/127] Refactor DesignPatterns\Behavioral\Iterator --- Behavioral/Iterator/BookListIterator.php | 2 +- .../Iterator/BookListReverseIterator.php | 56 ++++++++++++++++++- 2 files changed, 56 insertions(+), 2 deletions(-) diff --git a/Behavioral/Iterator/BookListIterator.php b/Behavioral/Iterator/BookListIterator.php index aff7e46..93df6d7 100644 --- a/Behavioral/Iterator/BookListIterator.php +++ b/Behavioral/Iterator/BookListIterator.php @@ -8,7 +8,7 @@ class BookListIterator implements \Iterator /** * @var BookList */ - protected $bookList; + private $bookList; /** * @var int diff --git a/Behavioral/Iterator/BookListReverseIterator.php b/Behavioral/Iterator/BookListReverseIterator.php index 5ab2be9..d7ec49a 100644 --- a/Behavioral/Iterator/BookListReverseIterator.php +++ b/Behavioral/Iterator/BookListReverseIterator.php @@ -2,15 +2,35 @@ namespace DesignPatterns\Behavioral\Iterator; -class BookListReverseIterator extends BookListIterator +class BookListReverseIterator implements \Iterator { + /** + * @var BookList + */ + private $bookList; + + /** + * @var int + */ + protected $currentBook = 0; + public function __construct(BookList $bookList) { $this->bookList = $bookList; $this->currentBook = $this->bookList->count() - 1; } + /** + * Return the current book + * @link http://php.net/manual/en/iterator.current.php + * @return Book Can return any type. + */ + public function current() + { + return $this->bookList->getBook($this->currentBook); + } + /** * (PHP 5 >= 5.0.0)
* Move forward to next element @@ -21,4 +41,38 @@ class BookListReverseIterator extends BookListIterator { $this->currentBook--; } + + /** + * (PHP 5 >= 5.0.0)
+ * Return the key of the current element + * @link http://php.net/manual/en/iterator.key.php + * @return mixed scalar on success, or null on failure. + */ + public function key() + { + return $this->currentBook; + } + + /** + * (PHP 5 >= 5.0.0)
+ * Checks if current position is valid + * @link http://php.net/manual/en/iterator.valid.php + * @return boolean The return value will be casted to boolean and then evaluated. + * Returns true on success or false on failure. + */ + public function valid() + { + return null !== $this->bookList->getBook($this->currentBook); + } + + /** + * (PHP 5 >= 5.0.0)
+ * Rewind the Iterator to the first element + * @link http://php.net/manual/en/iterator.rewind.php + * @return void Any returned value is ignored. + */ + public function rewind() + { + $this->currentBook = $this->bookList->count() - 1; + } } From 3dc77168693018b45d5e6f7c0cb6e710bd37f037 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Gonz=C3=A1lez=20Cervi=C3=B1o?= Date: Thu, 10 Sep 2015 10:16:04 +0200 Subject: [PATCH 089/127] [spanish translation] - wip - creational patterns --- .../Creational/AbstractFactory/README.po | 25 ++++--- .../LC_MESSAGES/Creational/Builder/README.po | 31 ++++++--- .../Creational/FactoryMethod/README.po | 12 ++-- .../LC_MESSAGES/Creational/Multiton/README.po | 12 ++-- .../es/LC_MESSAGES/Creational/Pool/README.po | 45 +++++++----- .../Creational/Prototype/README.po | 36 ++++++---- locale/es/LC_MESSAGES/Creational/README.po | 25 ++++--- .../Creational/SimpleFactory/README.po | 2 +- .../Creational/Singleton/README.po | 45 +++++++----- .../Creational/StaticFactory/README.po | 45 +++++++----- locale/es/LC_MESSAGES/README.po | 69 ++++++++++--------- 11 files changed, 210 insertions(+), 137 deletions(-) diff --git a/locale/es/LC_MESSAGES/Creational/AbstractFactory/README.po b/locale/es/LC_MESSAGES/Creational/AbstractFactory/README.po index 04a383e..3325520 100644 --- a/locale/es/LC_MESSAGES/Creational/AbstractFactory/README.po +++ b/locale/es/LC_MESSAGES/Creational/AbstractFactory/README.po @@ -1,23 +1,25 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"PO-Revision-Date: \n" +"Last-Translator: Daniel González \n" +"Language-Team: \n" +"X-Generator: Poedit 1.5.4\n" #: ../../Creational/AbstractFactory/README.rst:2 msgid "`Abstract Factory`__" -msgstr "" +msgstr "`Factoria Abstracta`__" #: ../../Creational/AbstractFactory/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Proposito" #: ../../Creational/AbstractFactory/README.rst:7 msgid "" @@ -26,18 +28,23 @@ msgid "" "interface. The client of the abstract factory does not care about how these " "objects are created, he just knows how they go together." msgstr "" +"Para crear una serie de objetos relacionados o dependientes sin especificar " +"a que clase concreta pertenecen. Normalmente las clases creadas implementan " +"las mismas interfaces. El cliente de la factoría abstracta no necesita " +"preocupase por como estos objetos son creados, el solo sabe que tiene que " +"hacer con ellos." #: ../../Creational/AbstractFactory/README.rst:13 msgid "UML Diagram" -msgstr "" +msgstr "Diagrama UML" #: ../../Creational/AbstractFactory/README.rst:20 msgid "Code" -msgstr "" +msgstr "Código" #: ../../Creational/AbstractFactory/README.rst:22 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Puedes encontrar el código en `GitHub`_" #: ../../Creational/AbstractFactory/README.rst:24 msgid "AbstractFactory.php" diff --git a/locale/es/LC_MESSAGES/Creational/Builder/README.po b/locale/es/LC_MESSAGES/Creational/Builder/README.po index 79d4fe3..69824fb 100644 --- a/locale/es/LC_MESSAGES/Creational/Builder/README.po +++ b/locale/es/LC_MESSAGES/Creational/Builder/README.po @@ -1,49 +1,60 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-09-10 10:12+0100\n" +"Last-Translator: Daniel González \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Language: es\n" +"Language-Team: \n" +"X-Generator: Poedit 1.5.4\n" #: ../../Creational/Builder/README.rst:2 msgid "`Builder`__" -msgstr "" +msgstr "`Constructor`__" #: ../../Creational/Builder/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Proposito" #: ../../Creational/Builder/README.rst:7 msgid "Builder is an interface that build parts of a complex object." msgstr "" +"El constructor es una interfaz que construye parte de un objeto complejo." #: ../../Creational/Builder/README.rst:9 msgid "" "Sometimes, if the builder has a better knowledge of what it builds, this " "interface could be an abstract class with default methods (aka adapter)." msgstr "" +"A veces, si el constructor conoce bien lo que está construyendo, esta " +"interfaz podría ser una clase abstracta con métodos por defecto ( también " +"conocido como Adaptador )" #: ../../Creational/Builder/README.rst:12 msgid "" "If you have a complex inheritance tree for objects, it is logical to have a " "complex inheritance tree for builders too." msgstr "" +"Si tienes una herencia compleja de tu árbol de objetos, es lógico tener " +"también una herencia compleja en el árbol de constructores." #: ../../Creational/Builder/README.rst:15 msgid "" "Note: Builders have often a fluent interface, see the mock builder of " "PHPUnit for example." msgstr "" +"Nota: Los constructores suelen tener una interfaz fluida, fíjate en el mock " +"builder de PHPUnit por ejemplo." #: ../../Creational/Builder/README.rst:19 msgid "Examples" -msgstr "" +msgstr "Ejemplos" #: ../../Creational/Builder/README.rst:21 msgid "PHPUnit: Mock Builder" @@ -51,15 +62,15 @@ msgstr "" #: ../../Creational/Builder/README.rst:24 msgid "UML Diagram" -msgstr "" +msgstr "Diagrama UML" #: ../../Creational/Builder/README.rst:31 msgid "Code" -msgstr "" +msgstr "Código" #: ../../Creational/Builder/README.rst:33 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Puedes encontrar el código en `GitHub`_" #: ../../Creational/Builder/README.rst:35 msgid "Director.php" diff --git a/locale/es/LC_MESSAGES/Creational/FactoryMethod/README.po b/locale/es/LC_MESSAGES/Creational/FactoryMethod/README.po index b65c56b..4ccb9a1 100644 --- a/locale/es/LC_MESSAGES/Creational/FactoryMethod/README.po +++ b/locale/es/LC_MESSAGES/Creational/FactoryMethod/README.po @@ -1,15 +1,17 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-09-10 10:02+0100\n" +"Last-Translator: Daniel González \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Language-Team: \n" +"X-Generator: Poedit 1.5.4\n" #: ../../Creational/FactoryMethod/README.rst:2 msgid "`Factory Method`__" @@ -51,7 +53,7 @@ msgstr "" #: ../../Creational/FactoryMethod/README.rst:29 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Puedes encontrar el código en `GitHub`_" #: ../../Creational/FactoryMethod/README.rst:31 msgid "FactoryMethod.php" diff --git a/locale/es/LC_MESSAGES/Creational/Multiton/README.po b/locale/es/LC_MESSAGES/Creational/Multiton/README.po index 702271d..d465309 100644 --- a/locale/es/LC_MESSAGES/Creational/Multiton/README.po +++ b/locale/es/LC_MESSAGES/Creational/Multiton/README.po @@ -1,15 +1,17 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-09-10 10:02+0100\n" +"Last-Translator: Daniel González \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Language-Team: \n" +"X-Generator: Poedit 1.5.4\n" #: ../../Creational/Multiton/README.rst:2 msgid "Multiton" @@ -53,7 +55,7 @@ msgstr "" #: ../../Creational/Multiton/README.rst:29 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Puedes encontrar el código en `GitHub`_" #: ../../Creational/Multiton/README.rst:31 msgid "Multiton.php" diff --git a/locale/es/LC_MESSAGES/Creational/Pool/README.po b/locale/es/LC_MESSAGES/Creational/Pool/README.po index 8defedd..99fbef8 100644 --- a/locale/es/LC_MESSAGES/Creational/Pool/README.po +++ b/locale/es/LC_MESSAGES/Creational/Pool/README.po @@ -1,19 +1,21 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" +"PO-Revision-Date: 2015-09-10 10:03+0100\n" +"Last-Translator: Daniel González \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"MIME-Version: 1.0\n" +"Language: es\n" +"Language-Team: \n" +"X-Generator: Poedit 1.5.4\n" #: ../../Creational/Pool/README.rst:2 msgid "`Pool`__" -msgstr "" +msgstr "`Pila`__" #: ../../Creational/Pool/README.rst:4 msgid "" @@ -24,16 +26,27 @@ msgid "" "object. When the client has finished, it returns the object, which is a " "specific type of factory object, to the pool rather than destroying it." msgstr "" +"El **Patrón Pila** es un patrón de diseño creacional que utiliza un conjunto " +"de objetos inicializados y los mantiene listos para usar el la \"pila\" en " +"lugar de crearlos y destruirlos bajo demanda. Un cliente puede pedirle a la " +"pila un objeto, realizar las operaciones necesarias sobre el. Cuando el " +"cliente ha terminado devuelve el objeto a la pila en lugar de destruirlo." #: ../../Creational/Pool/README.rst:11 msgid "" -"Object pooling can offer a significant performance boost in situations where" -" the cost of initializing a class instance is high, the rate of " -"instantiation of a class is high, and the number of instances in use at any " -"one time is low. The pooled object is obtained in predictable time when " -"creation of the new objects (especially over network) may take variable " -"time." +"Object pooling can offer a significant performance boost in situations where " +"the cost of initializing a class instance is high, the rate of instantiation " +"of a class is high, and the number of instances in use at any one time is " +"low. The pooled object is obtained in predictable time when creation of the " +"new objects (especially over network) may take variable time." msgstr "" +"Mantener los objetos en una pila puede ofrecer mejoras significativas de " +"rendimiento en aquellas situaciones donde el coste de inicializar las " +"instancias es alto, el volumen de veces que se instancia la clase es alto y " +"el número de instancias que se mantienen en uso a la vez es bajo. El objeto " +"puede recuperase de la pila en una cantidad de tiempo predecible, cuando la " +"creación de nuevos objetos ( especialmente cuando se realiza a través de una " +"red ) puede variar." #: ../../Creational/Pool/README.rst:18 msgid "" @@ -42,19 +55,19 @@ msgid "" "and large graphic objects like fonts or bitmaps. In certain situations, " "simple object pooling (that hold no external resources, but only occupy " "memory) may not be efficient and could decrease performance." -msgstr "" +msgstr "Sin embargo estos beneficios " #: ../../Creational/Pool/README.rst:25 msgid "UML Diagram" -msgstr "" +msgstr "Diagrama UML" #: ../../Creational/Pool/README.rst:32 msgid "Code" -msgstr "" +msgstr "Código" #: ../../Creational/Pool/README.rst:34 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Puedes encontrar el código en `GitHub`_" #: ../../Creational/Pool/README.rst:36 msgid "Pool.php" diff --git a/locale/es/LC_MESSAGES/Creational/Prototype/README.po b/locale/es/LC_MESSAGES/Creational/Prototype/README.po index fac09ef..dfd8b5e 100644 --- a/locale/es/LC_MESSAGES/Creational/Prototype/README.po +++ b/locale/es/LC_MESSAGES/Creational/Prototype/README.po @@ -1,68 +1,74 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-09-09 16:26+0100\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Last-Translator: Daniel González \n" +"Language-Team: \n" +"X-Generator: Poedit 1.5.4\n" #: ../../Creational/Prototype/README.rst:2 msgid "`Prototype`__" -msgstr "" +msgstr "`Prototype`__" #: ../../Creational/Prototype/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Proposito" #: ../../Creational/Prototype/README.rst:7 msgid "" "To avoid the cost of creating objects the standard way (new Foo()) and " "instead create a prototype and clone it." msgstr "" +"Evitar el cote de crear objetos de la forma estandar (new Foo()). En su " +"lugar crear una instancia y clonarla." #: ../../Creational/Prototype/README.rst:11 msgid "Examples" -msgstr "" +msgstr "Ejemplos" #: ../../Creational/Prototype/README.rst:13 msgid "" "Large amounts of data (e.g. create 1,000,000 rows in a database at once via " "a ORM)." msgstr "" +"Grandes cantidades de datos ( ej. crear 1.000.000 de registros en la base de " +"datos a través del ORM )." #: ../../Creational/Prototype/README.rst:17 msgid "UML Diagram" -msgstr "" +msgstr "Diagrama UML" #: ../../Creational/Prototype/README.rst:24 msgid "Code" -msgstr "" +msgstr "Código" #: ../../Creational/Prototype/README.rst:26 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Puedes encontrar el código en `GitHub`_" #: ../../Creational/Prototype/README.rst:28 msgid "index.php" -msgstr "" +msgstr "index.php" #: ../../Creational/Prototype/README.rst:34 msgid "BookPrototype.php" -msgstr "" +msgstr "BookPrototype.php" #: ../../Creational/Prototype/README.rst:40 msgid "BarBookPrototype.php" -msgstr "" +msgstr "BarBookPrototype.php" #: ../../Creational/Prototype/README.rst:46 msgid "FooBookPrototype.php" -msgstr "" +msgstr "FooBookPrototype.php" #: ../../Creational/Prototype/README.rst:53 msgid "Test" -msgstr "" +msgstr "Test" diff --git a/locale/es/LC_MESSAGES/Creational/README.po b/locale/es/LC_MESSAGES/Creational/README.po index 72f543b..7a5db3c 100644 --- a/locale/es/LC_MESSAGES/Creational/README.po +++ b/locale/es/LC_MESSAGES/Creational/README.po @@ -1,25 +1,32 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-09-08 17:17+0100\n" +"Last-Translator: Daniel González \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.5.4\n" +"Language: es\n" #: ../../Creational/README.rst:2 msgid "`Creational`__" -msgstr "" +msgstr "`Creacionales`__" #: ../../Creational/README.rst:4 msgid "" -"In software engineering, creational design patterns are design patterns that" -" deal with object creation mechanisms, trying to create objects in a manner " -"suitable to the situation. The basic form of object creation could result in" -" design problems or added complexity to the design. Creational design " +"In software engineering, creational design patterns are design patterns that " +"deal with object creation mechanisms, trying to create objects in a manner " +"suitable to the situation. The basic form of object creation could result in " +"design problems or added complexity to the design. Creational design " "patterns solve this problem by somehow controlling this object creation." msgstr "" +"En ingeniería del software, los patrones de diseño creacionales son patrones " +"que se encargan del los mecanismos de creación de los objetos, intentando " +"crear objetos de una manera adecuada a cada situación. La forma básica de " +"creación de objetos podría generar un problemas de diseño o añadir " +"complejidad al diseño. Los patrones de diseño creacionales resuelven este " +"problema controlando de alguna forma la creación de objetos." diff --git a/locale/es/LC_MESSAGES/Creational/SimpleFactory/README.po b/locale/es/LC_MESSAGES/Creational/SimpleFactory/README.po index d011ad6..a56e3b4 100644 --- a/locale/es/LC_MESSAGES/Creational/SimpleFactory/README.po +++ b/locale/es/LC_MESSAGES/Creational/SimpleFactory/README.po @@ -6,10 +6,10 @@ msgstr "" "POT-Creation-Date: 2015-05-29 12:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: es\n" #: ../../Creational/SimpleFactory/README.rst:2 msgid "Simple Factory" diff --git a/locale/es/LC_MESSAGES/Creational/Singleton/README.po b/locale/es/LC_MESSAGES/Creational/Singleton/README.po index 5d108ca..0bb78f3 100644 --- a/locale/es/LC_MESSAGES/Creational/Singleton/README.po +++ b/locale/es/LC_MESSAGES/Creational/Singleton/README.po @@ -1,75 +1,84 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-09-08 17:34+0100\n" +"Last-Translator: Daniel González \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.5.4\n" +"Language: es\n" +"Language-Team: \n" #: ../../Creational/Singleton/README.rst:2 msgid "`Singleton`__" -msgstr "" +msgstr "`Singleton`__" #: ../../Creational/Singleton/README.rst:4 msgid "" "**THIS IS CONSIDERED TO BE AN ANTI-PATTERN! FOR BETTER TESTABILITY AND " "MAINTAINABILITY USE DEPENDENCY INJECTION!**" msgstr "" +"**ESTO ES CONSIDERADO UN ANTI-PATRÓN. PARA MEJOR TESTEABILIDAD Y " +"MANTENIBILIDAD USA INYECCIÓN DE DEPENDENCIAS**" #: ../../Creational/Singleton/README.rst:8 msgid "Purpose" -msgstr "" +msgstr "Proposito" #: ../../Creational/Singleton/README.rst:10 msgid "" -"To have only one instance of this object in the application that will handle" -" all calls." +"To have only one instance of this object in the application that will handle " +"all calls." msgstr "" +"Tener una única instancia de este objeto en la aplicación que pueda " +"encargarse de todas las llamadas." #: ../../Creational/Singleton/README.rst:14 msgid "Examples" -msgstr "" +msgstr "Ejemplos" #: ../../Creational/Singleton/README.rst:16 msgid "DB Connector" -msgstr "" +msgstr "Conexión a la base de datos" #: ../../Creational/Singleton/README.rst:17 msgid "" "Logger (may also be a Multiton if there are many log files for several " "purposes)" msgstr "" +"Logger ( también podría ser un Multiton si hay varios ficheros de log para " +"diferentes propósitos )" #: ../../Creational/Singleton/README.rst:19 -msgid "" -"Lock file for the application (there is only one in the filesystem ...)" +msgid "Lock file for the application (there is only one in the filesystem ...)" msgstr "" +"Bloqueo de ficheros para la aplicación ( Solo hay uno en el sistema de " +"ficheros )" #: ../../Creational/Singleton/README.rst:23 msgid "UML Diagram" -msgstr "" +msgstr "Diagrama UML" #: ../../Creational/Singleton/README.rst:30 msgid "Code" -msgstr "" +msgstr "Código" #: ../../Creational/Singleton/README.rst:32 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Puedes ver este código en `GitHub`_" #: ../../Creational/Singleton/README.rst:34 msgid "Singleton.php" -msgstr "" +msgstr "Singleton.php" #: ../../Creational/Singleton/README.rst:41 msgid "Test" -msgstr "" +msgstr "Test" #: ../../Creational/Singleton/README.rst:43 msgid "Tests/SingletonTest.php" -msgstr "" +msgstr "Tests/SingletonTest.php" diff --git a/locale/es/LC_MESSAGES/Creational/StaticFactory/README.po b/locale/es/LC_MESSAGES/Creational/StaticFactory/README.po index 4a6f64e..7005abb 100644 --- a/locale/es/LC_MESSAGES/Creational/StaticFactory/README.po +++ b/locale/es/LC_MESSAGES/Creational/StaticFactory/README.po @@ -1,23 +1,25 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-09-08 17:47+0100\n" +"Last-Translator: Daniel González \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Language-Team: \n" +"X-Generator: Poedit 1.5.4\n" #: ../../Creational/StaticFactory/README.rst:2 msgid "Static Factory" -msgstr "" +msgstr "Static Factory" #: ../../Creational/StaticFactory/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Proposito" #: ../../Creational/StaticFactory/README.rst:7 msgid "" @@ -27,49 +29,56 @@ msgid "" "method to create all types of objects it can create. It is usually named " "``factory`` or ``build``." msgstr "" +"Parecido a AbstractFactory, este patrón es usado para crear conjuntos de " +"objetos relacionados o dependientes. La diferencia entre este y la factoría " +"abstracta es que el patrón factoría estática usa un sólo método estático " +"para crear todos los tipos de objetos que puede crear. Este método " +"normalmente se llama ``factory`` or ``build``." #: ../../Creational/StaticFactory/README.rst:14 msgid "Examples" -msgstr "" +msgstr "Ejemplos" #: ../../Creational/StaticFactory/README.rst:16 msgid "" -"Zend Framework: ``Zend_Cache_Backend`` or ``_Frontend`` use a factory method" -" create cache backends or frontends" +"Zend Framework: ``Zend_Cache_Backend`` or ``_Frontend`` use a factory method " +"create cache backends or frontends" msgstr "" +"Zend Framework: ``Zend_Cache_Backend`` or ``_Frontend`` usa un método " +"factoría para crear la cache de las aplicaciones." #: ../../Creational/StaticFactory/README.rst:20 msgid "UML Diagram" -msgstr "" +msgstr "Diagrama UML" #: ../../Creational/StaticFactory/README.rst:27 msgid "Code" -msgstr "" +msgstr "Código" #: ../../Creational/StaticFactory/README.rst:29 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "Puedes encontrar el código en `GitHub`_" #: ../../Creational/StaticFactory/README.rst:31 msgid "StaticFactory.php" -msgstr "" +msgstr "StaticFactory.php" #: ../../Creational/StaticFactory/README.rst:37 msgid "FormatterInterface.php" -msgstr "" +msgstr "FormatterInterface.php" #: ../../Creational/StaticFactory/README.rst:43 msgid "FormatString.php" -msgstr "" +msgstr "FormatString.php" #: ../../Creational/StaticFactory/README.rst:49 msgid "FormatNumber.php" -msgstr "" +msgstr "FormatNumber.php" #: ../../Creational/StaticFactory/README.rst:56 msgid "Test" -msgstr "" +msgstr "Test" #: ../../Creational/StaticFactory/README.rst:58 msgid "Tests/StaticFactoryTest.php" -msgstr "" +msgstr "Tests/StaticFactoryTest.php" diff --git a/locale/es/LC_MESSAGES/README.po b/locale/es/LC_MESSAGES/README.po index 52828ee..ddebaed 100644 --- a/locale/es/LC_MESSAGES/README.po +++ b/locale/es/LC_MESSAGES/README.po @@ -1,15 +1,17 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" +"PO-Revision-Date: 2015-09-08 17:14+0100\n" +"Last-Translator: Daniel González \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.5.4\n" +"Language: es\n" +"Language-Team: \n" #: ../../README.rst:5 msgid "DesignPatternsPHP" @@ -17,20 +19,23 @@ msgstr "" #: ../../README.rst:11 msgid "" -"This is a collection of known `design patterns`_ and some sample code how to" -" implement them in PHP. Every pattern has a small list of examples (most of " +"This is a collection of known `design patterns`_ and some sample code how to " +"implement them in PHP. Every pattern has a small list of examples (most of " "them from Zend Framework, Symfony2 or Doctrine2 as I'm most familiar with " "this software)." -msgstr "Esta es una colleción de los conocidos como `patrones de diseño`_ y algunos ejemplos de codigo sobre como " -" implementarlos en PHP. Cada patron tiene una pequeña lista de ejemplos ( la mayoría de " -" ellos de Zend Framework, Symfony2 o Doctrine2 ya que estoy más familiarizado con ellos )" +msgstr "" +"Esto es un recopilatorio de los conocidos como `patrones de diseño`_ junto " +"con algunos ejemplos de código sobre como implementarlos en PHP. Cada patrón " +"tiene una pequeña lista de ejemplos ( la mayoría de ellos de Zend " +"Framework, Symfony2 o Doctrine2 ya que estoy más familiarizado con ellos )." #: ../../README.rst:16 msgid "" "I think the problem with patterns is that often people do know them but " "don't know when to apply which." -msgstr "Yo creo que el problema con los patrones es que con frecuencia la gente los conoce, pero" -"no saben cuando aplicar cada uno" +msgstr "" +"El problema con los patrones es que la mayoría de la gente los conoce, pero " +"no saben cuando aplicarlos." #: ../../README.rst:20 msgid "Patterns" @@ -38,12 +43,13 @@ msgstr "Patrones" #: ../../README.rst:22 msgid "" -"The patterns can be structured in roughly three different categories. Please" -" click on **the title of every pattern's page** for a full explanation of " -"the pattern on Wikipedia." -msgstr "Los patrones pueden agruparse en aproximadamente tres categorías diferentes. Por favor " -" pincha en **el título de cada pagina de patrón** para ver la explicación completa " -" del patron en la wikipedia." +"The patterns can be structured in roughly three different categories. Please " +"click on **the title of every pattern's page** for a full explanation of the " +"pattern on Wikipedia." +msgstr "" +"Los patrones pueden clasificarse en tres categorías diferentes. Por favor " +"pincha en **el título de cada pagina de patrón** para ver la explicación " +"completa del patrón en la Wikipedia." #: ../../README.rst:35 msgid "Contribute" @@ -54,12 +60,13 @@ msgid "" "Please feel free to fork and extend existing or add your own examples and " "send a pull request with your changes! To establish a consistent code " "quality, please check your code using `PHP CodeSniffer`_ against `PSR2 " -"standard`_ using ``./vendor/bin/phpcs -p --standard=PSR2 --ignore=vendor " -".``." -msgstr "Por favor tomate la libertad de copiar y extender o añadir tus propios ejemplos y" -"enviar peticiones para añadir tus cambios al repositorio principal. Para establecer una calidad de código " -" consistente, por favor revisa que tu codigo usa `PHP CodeSniffer` con el `PSR2 standard`_ " -"utilizando ``./vendor/bin/phpcs -p --standard=PSR2 --ignore=vendor " +"standard`_ using ``./vendor/bin/phpcs -p --standard=PSR2 --ignore=vendor .``." +msgstr "" +"Por favor tomate la libertad de copiar, extender y añadir tus propios " +"ejemplos y enviar una solicitud para añadir tus cambios al repositorio " +"principal. Para establecer una calidad de código consistente revisa que tu " +"código usa `PHP CodeSniffer` con el `PSR2 standard`_ utilizando ``./vendor/" +"bin/phpcs -p --standard=PSR2 --ignore=vendor " #: ../../README.rst:44 msgid "License" @@ -75,15 +82,15 @@ msgstr "Copyright (c) 2014 `Dominik Liebler`_ and `contributors`_" #: ../../README.rst:50 msgid "" -"Permission is hereby granted, free of charge, to any person obtaining a copy" -" of this software and associated documentation files (the 'Software'), to " +"Permission is hereby granted, free of charge, to any person obtaining a copy " +"of this software and associated documentation files (the 'Software'), to " "deal in the Software without restriction, including without limitation the " "rights to use, copy, modify, merge, publish, distribute, sublicense, and/or " "sell copies of the Software, and to permit persons to whom the Software is " "furnished to do so, subject to the following conditions:" msgstr "" -"Permission is hereby granted, free of charge, to any person obtaining a copy" -" of this software and associated documentation files (the 'Software'), to " +"Permission is hereby granted, free of charge, to any person obtaining a copy " +"of this software and associated documentation files (the 'Software'), to " "deal in the Software without restriction, including without limitation the " "rights to use, copy, modify, merge, publish, distribute, sublicense, and/or " "sell copies of the Software, and to permit persons to whom the Software is " @@ -104,13 +111,13 @@ msgid "" "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE " "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER " "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING " -"FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS" -" IN THE SOFTWARE." +"FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS " +"IN THE SOFTWARE." msgstr "" "THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR " "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, " "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE " "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER " "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING " -"FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS" -" IN THE SOFTWARE." +"FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS " +"IN THE SOFTWARE." From 98aa292e234fdd66c2043cfa5cbe62d4eb6a22ec Mon Sep 17 00:00:00 2001 From: yplam Date: Fri, 11 Sep 2015 18:31:07 +0800 Subject: [PATCH 090/127] translate some Structural patterns --- .../LC_MESSAGES/Behavioral/Memento/README.po | 116 +++++++++++++----- .../LC_MESSAGES/Creational/Multiton/README.po | 10 +- .../LC_MESSAGES/More/Delegation/README.po | 25 +++- .../LC_MESSAGES/Structural/Adapter/README.po | 20 +-- .../LC_MESSAGES/Structural/Bridge/README.po | 15 +-- .../Structural/Composite/README.po | 22 ++-- .../Structural/DataMapper/README.po | 24 ++-- .../Structural/DependencyInjection/README.po | 2 +- .../LC_MESSAGES/Structural/Registry/README.po | 19 +-- 9 files changed, 170 insertions(+), 83 deletions(-) diff --git a/locale/zh_CN/LC_MESSAGES/Behavioral/Memento/README.po b/locale/zh_CN/LC_MESSAGES/Behavioral/Memento/README.po index 913069a..fa2378c 100644 --- a/locale/zh_CN/LC_MESSAGES/Behavioral/Memento/README.po +++ b/locale/zh_CN/LC_MESSAGES/Behavioral/Memento/README.po @@ -1,4 +1,4 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" @@ -19,67 +19,117 @@ msgstr "" msgid "Purpose" msgstr "" -#: ../../Behavioral/Memento/README.rst:7 -msgid "" -"Provide the ability to restore an object to its previous state (undo via " -"rollback)." -msgstr "" - -#: ../../Behavioral/Memento/README.rst:10 -msgid "" -"The memento pattern is implemented with three objects: the originator, a " -"caretaker and a memento. The originator is some object that has an internal " -"state. The caretaker is going to do something to the originator, but wants " -"to be able to undo the change. The caretaker first asks the originator for a" -" memento object. Then it does whatever operation (or sequence of operations)" -" it was going to do. To roll back to the state before the operations, it " -"returns the memento object to the originator. The memento object itself is " -"an opaque object (one which the caretaker cannot, or should not, change). " -"When using this pattern, care should be taken if the originator may change " -"other objects or resources - the memento pattern operates on a single " -"object." -msgstr "" - -#: ../../Behavioral/Memento/README.rst:23 +#: ../../Behavioral/Memento/README.rst:39 msgid "Examples" msgstr "" -#: ../../Behavioral/Memento/README.rst:25 +#: ../../Behavioral/Memento/README.rst:41 msgid "The seed of a pseudorandom number generator" msgstr "" -#: ../../Behavioral/Memento/README.rst:26 +#: ../../Behavioral/Memento/README.rst:42 msgid "The state in a finite state machine" msgstr "" -#: ../../Behavioral/Memento/README.rst:29 +#: ../../Behavioral/Memento/README.rst:46 msgid "UML Diagram" msgstr "" -#: ../../Behavioral/Memento/README.rst:36 +#: ../../Behavioral/Memento/README.rst:53 msgid "Code" msgstr "" -#: ../../Behavioral/Memento/README.rst:38 +#: ../../Behavioral/Memento/README.rst:55 msgid "You can also find these code on `GitHub`_" msgstr "" -#: ../../Behavioral/Memento/README.rst:40 +#: ../../Behavioral/Memento/README.rst:57 msgid "Memento.php" msgstr "" -#: ../../Behavioral/Memento/README.rst:46 +#: ../../Behavioral/Memento/README.rst:63 msgid "Originator.php" msgstr "" -#: ../../Behavioral/Memento/README.rst:52 +#: ../../Behavioral/Memento/README.rst:69 msgid "Caretaker.php" msgstr "" -#: ../../Behavioral/Memento/README.rst:59 +#: ../../Behavioral/Memento/README.rst:76 msgid "Test" msgstr "" -#: ../../Behavioral/Memento/README.rst:61 +#: ../../Behavioral/Memento/README.rst:78 msgid "Tests/MementoTest.php" msgstr "" + +#: ../../Behavioral/Memento/README.rst:7 +msgid "" +"It provides the ability to restore an object to it's previous state (undo " +"via rollback) or to gain access to state of the object, without revealing " +"it's implementation (i.e., the object is not required to have a functional " +"for return the current state)." +msgstr "" + +#: ../../Behavioral/Memento/README.rst:12 +msgid "" +"The memento pattern is implemented with three objects: the Originator, a " +"Caretaker and a Memento." +msgstr "" + +#: ../../Behavioral/Memento/README.rst:15 +msgid "" +"Memento – an object that *contains a concrete unique snapshot of state* of " +"any object or resource: string, number, array, an instance of class and so " +"on. The uniqueness in this case does not imply the prohibition existence of " +"similar states in different snapshots. That means the state can be extracted" +" as the independent clone. Any object stored in the Memento should be *a " +"full copy of the original object rather than a reference* to the original " +"object. The Memento object is a \"opaque object\" (the object that no one " +"can or should change)." +msgstr "" + +#: ../../Behavioral/Memento/README.rst:24 +msgid "" +"Originator – it is an object that contains the *actual state of an external " +"object is strictly specified type*. Originator is able to create a unique " +"copy of this state and return it wrapped in a Memento. The Originator does " +"not know the history of changes. You can set a concrete state to Originator " +"from the outside, which will be considered as actual. The Originator must " +"make sure that given state corresponds the allowed type of object. " +"Originator may (but not should) have any methods, but they *they can't make " +"changes to the saved object state*." +msgstr "" + +#: ../../Behavioral/Memento/README.rst:33 +msgid "" +"Caretaker *controls the states history*. He may make changes to an object; " +"take a decision to save the state of an external object in the Originator; " +"ask from the Originator snapshot of the current state; or set the Originator" +" state to equivalence with some snapshot from history." +msgstr "" + +#: ../../Behavioral/Memento/README.rst:43 +msgid "" +"Control for intermediate states of `ORM Model `_ before saving" +msgstr "" + +#~ msgid "" +#~ "Provide the ability to restore an object to its previous state (undo via " +#~ "rollback)." +#~ msgstr "" + +#~ msgid "" +#~ "The memento pattern is implemented with three objects: the originator, a " +#~ "caretaker and a memento. The originator is some object that has an internal " +#~ "state. The caretaker is going to do something to the originator, but wants " +#~ "to be able to undo the change. The caretaker first asks the originator for a" +#~ " memento object. Then it does whatever operation (or sequence of operations)" +#~ " it was going to do. To roll back to the state before the operations, it " +#~ "returns the memento object to the originator. The memento object itself is " +#~ "an opaque object (one which the caretaker cannot, or should not, change). " +#~ "When using this pattern, care should be taken if the originator may change " +#~ "other objects or resources - the memento pattern operates on a single " +#~ "object." +#~ msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Creational/Multiton/README.po b/locale/zh_CN/LC_MESSAGES/Creational/Multiton/README.po index 7ce7048..d187f1b 100644 --- a/locale/zh_CN/LC_MESSAGES/Creational/Multiton/README.po +++ b/locale/zh_CN/LC_MESSAGES/Creational/Multiton/README.po @@ -1,4 +1,4 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" @@ -19,8 +19,7 @@ msgstr "多例" msgid "" "**THIS IS CONSIDERED TO BE AN ANTI-PATTERN! FOR BETTER TESTABILITY AND " "MAINTAINABILITY USE DEPENDENCY INJECTION!**" -msgstr "" -"**多例模式已经被考虑列入到反模式中!请使用依赖注入获得更好的代码可测试性和可控性!**" +msgstr "**多例模式已经被考虑列入到反模式中!请使用依赖注入获得更好的代码可测试性和可控性!**" #: ../../Creational/Multiton/README.rst:8 msgid "Purpose" @@ -61,5 +60,6 @@ msgid "Multiton.php" msgstr "" #: ../../Creational/Multiton/README.rst:38 -msgid "测试" -msgstr "" +msgid "Test" +msgstr "测试" + diff --git a/locale/zh_CN/LC_MESSAGES/More/Delegation/README.po b/locale/zh_CN/LC_MESSAGES/More/Delegation/README.po index 169e8fd..0b52512 100644 --- a/locale/zh_CN/LC_MESSAGES/More/Delegation/README.po +++ b/locale/zh_CN/LC_MESSAGES/More/Delegation/README.po @@ -1,4 +1,4 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" @@ -19,10 +19,6 @@ msgstr "" msgid "Purpose" msgstr "" -#: ../../More/Delegation/README.rst:7 ../../More/Delegation/README.rst:12 -msgid "..." -msgstr "" - #: ../../More/Delegation/README.rst:10 msgid "Examples" msgstr "" @@ -58,3 +54,22 @@ msgstr "" #: ../../More/Delegation/README.rst:47 msgid "Tests/DelegationTest.php" msgstr "" + +#: ../../More/Delegation/README.rst:7 +msgid "" +"Demonstrate the Delegator pattern, where an object, instead of performing " +"one of its stated tasks, delegates that task to an associated helper object." +" In this case TeamLead professes to writeCode and Usage uses this, while " +"TeamLead delegates writeCode to JuniorDeveloper's writeBadCode function. " +"This inverts the responsibility so that Usage is unknowingly executing " +"writeBadCode." +msgstr "" + +#: ../../More/Delegation/README.rst:12 +msgid "" +"Please review JuniorDeveloper.php, TeamLead.php, and then Usage.php to see " +"it all tied together." +msgstr "" + +#~ msgid "..." +#~ msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/Structural/Adapter/README.po b/locale/zh_CN/LC_MESSAGES/Structural/Adapter/README.po index b351fc9..99ac6ec 100644 --- a/locale/zh_CN/LC_MESSAGES/Structural/Adapter/README.po +++ b/locale/zh_CN/LC_MESSAGES/Structural/Adapter/README.po @@ -13,11 +13,11 @@ msgstr "" #: ../../Structural/Adapter/README.rst:2 msgid "`Adapter / Wrapper`__" -msgstr "" +msgstr "`适配器模式`__" #: ../../Structural/Adapter/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "目的" #: ../../Structural/Adapter/README.rst:7 msgid "" @@ -26,32 +26,36 @@ msgid "" "incompatible interfaces by providing it's interface to clients while using " "the original interface." msgstr "" +"将某个类的接口转换成与另一个接口兼容。适配器通过将原始接口进行转换,给用户" +"提供一个兼容接口,使得原来因为接口不同而无法一起使用的类可以得到兼容。" #: ../../Structural/Adapter/README.rst:13 msgid "Examples" -msgstr "" +msgstr "例子" #: ../../Structural/Adapter/README.rst:15 msgid "DB Client libraries adapter" -msgstr "" +msgstr "数据库客户端库适配器" #: ../../Structural/Adapter/README.rst:16 msgid "" "using multiple different webservices and adapters normalize data so that the" " outcome is the same for all" msgstr "" +"使用不同的webservices,通过适配器来标准化输出数据,从而保证不同webservice输出的" +"数据是一致的" #: ../../Structural/Adapter/README.rst:20 msgid "UML Diagram" -msgstr "" +msgstr "UML 图" #: ../../Structural/Adapter/README.rst:27 msgid "Code" -msgstr "" +msgstr "代码" #: ../../Structural/Adapter/README.rst:29 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "你可以在 `GitHub`_ 上找到这些代码" #: ../../Structural/Adapter/README.rst:31 msgid "PaperBookInterface.php" @@ -75,7 +79,7 @@ msgstr "" #: ../../Structural/Adapter/README.rst:62 msgid "Test" -msgstr "" +msgstr "测试" #: ../../Structural/Adapter/README.rst:64 msgid "Tests/AdapterTest.php" diff --git a/locale/zh_CN/LC_MESSAGES/Structural/Bridge/README.po b/locale/zh_CN/LC_MESSAGES/Structural/Bridge/README.po index a27619b..54266dc 100644 --- a/locale/zh_CN/LC_MESSAGES/Structural/Bridge/README.po +++ b/locale/zh_CN/LC_MESSAGES/Structural/Bridge/README.po @@ -13,21 +13,22 @@ msgstr "" #: ../../Structural/Bridge/README.rst:2 msgid "`Bridge`__" -msgstr "" +msgstr "`桥接模式`__" #: ../../Structural/Bridge/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "目的" #: ../../Structural/Bridge/README.rst:7 msgid "" "Decouple an abstraction from its implementation so that the two can vary " "independently." msgstr "" +"解耦一个对象的实现与抽象,这样两者可以独立地变化。" #: ../../Structural/Bridge/README.rst:11 msgid "Sample:" -msgstr "" +msgstr "例子" #: ../../Structural/Bridge/README.rst:13 msgid "`Symfony DoctrineBridge `__" @@ -35,15 +36,15 @@ msgstr "" #: ../../Structural/Bridge/README.rst:17 msgid "UML Diagram" -msgstr "" +msgstr "UML 图" #: ../../Structural/Bridge/README.rst:24 msgid "Code" -msgstr "" +msgstr "代码" #: ../../Structural/Bridge/README.rst:26 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "你可以在 `GitHub`_ 上找到这些代码" #: ../../Structural/Bridge/README.rst:28 msgid "Workshop.php" @@ -71,7 +72,7 @@ msgstr "" #: ../../Structural/Bridge/README.rst:65 msgid "Test" -msgstr "" +msgstr "测试" #: ../../Structural/Bridge/README.rst:67 msgid "Tests/BridgeTest.php" diff --git a/locale/zh_CN/LC_MESSAGES/Structural/Composite/README.po b/locale/zh_CN/LC_MESSAGES/Structural/Composite/README.po index 90ddd21..8c615d0 100644 --- a/locale/zh_CN/LC_MESSAGES/Structural/Composite/README.po +++ b/locale/zh_CN/LC_MESSAGES/Structural/Composite/README.po @@ -13,45 +13,49 @@ msgstr "" #: ../../Structural/Composite/README.rst:2 msgid "`Composite`__" -msgstr "" +msgstr "`组合模式`__" #: ../../Structural/Composite/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "目的" #: ../../Structural/Composite/README.rst:7 msgid "" "To treat a group of objects the same way as a single instance of the object." -msgstr "" +msgstr "以单个对象的方式来对待一组对象" #: ../../Structural/Composite/README.rst:11 msgid "Examples" -msgstr "" +msgstr "例子" #: ../../Structural/Composite/README.rst:13 msgid "" "a form class instance handles all its form elements like a single instance " "of the form, when ``render()`` is called, it subsequently runs through all " "its child elements and calls ``render()`` on them" -msgstr "" +msgstr "" +"form类的实例包含多个子元素,而它也像单个子元素那样响应render()请求,当" +"调用``render()``方法时,它会历遍所有的子元素,调用``render()``方法" #: ../../Structural/Composite/README.rst:16 msgid "" "``Zend_Config``: a tree of configuration options, each one is a " "``Zend_Config`` object itself" msgstr "" +"``Zend_Config``: 配置选项树, 其每一个分支都是 " +"``Zend_Config`` 对象" #: ../../Structural/Composite/README.rst:20 msgid "UML Diagram" -msgstr "" +msgstr "UML 图" #: ../../Structural/Composite/README.rst:27 msgid "Code" -msgstr "" +msgstr "代码" #: ../../Structural/Composite/README.rst:29 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "你可以在 `GitHub`_ 上找到这些代码" #: ../../Structural/Composite/README.rst:31 msgid "FormElement.php" @@ -71,7 +75,7 @@ msgstr "" #: ../../Structural/Composite/README.rst:56 msgid "Test" -msgstr "" +msgstr "测试" #: ../../Structural/Composite/README.rst:58 msgid "Tests/CompositeTest.php" diff --git a/locale/zh_CN/LC_MESSAGES/Structural/DataMapper/README.po b/locale/zh_CN/LC_MESSAGES/Structural/DataMapper/README.po index 5ccd9a3..1dca56f 100644 --- a/locale/zh_CN/LC_MESSAGES/Structural/DataMapper/README.po +++ b/locale/zh_CN/LC_MESSAGES/Structural/DataMapper/README.po @@ -13,11 +13,11 @@ msgstr "" #: ../../Structural/DataMapper/README.rst:2 msgid "`Data Mapper`__" -msgstr "" +msgstr "`数据映射器`__" #: ../../Structural/DataMapper/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "目的" #: ../../Structural/DataMapper/README.rst:7 msgid "" @@ -31,34 +31,42 @@ msgid "" "many different domain entity types, dedicated mappers will handle one or a " "few." msgstr "" +"数据映射器是一个数据访问层,用于将数据在持久性数据存储(通常是一个关系数据库)" +"和内存中的数据表示(领域层)之间进行相互转换。其目的是为了将数据的内存表示、持久存储、" +"数据访问进行分离。该层由一个或者多个映射器组成(或者数据访问对象),并且进行数据的转换。" +"映射器的实现在范围上有所不同。通用映射器将处理许多不同领域的实体类型," +"而专用映射器将处理一个或几个。" #: ../../Structural/DataMapper/README.rst:17 msgid "" "The key point of this pattern is, unlike Active Record pattern, the data " "model follows Single Responsibility Principle." msgstr "" +"此模式的主要特点是,与Active Record不同,其数据模式遵循单一职责原则" +"(Single Responsibility Principle)。" #: ../../Structural/DataMapper/README.rst:21 msgid "Examples" -msgstr "" +msgstr "例子" #: ../../Structural/DataMapper/README.rst:23 msgid "" "DB Object Relational Mapper (ORM) : Doctrine2 uses DAO named as " "\"EntityRepository\"" msgstr "" - +"DB Object Relational Mapper (ORM) : Doctrine2 使用 DAO " +"\"EntityRepository\" 作为DAO" #: ../../Structural/DataMapper/README.rst:27 msgid "UML Diagram" -msgstr "" +msgstr "UML 图" #: ../../Structural/DataMapper/README.rst:34 msgid "Code" -msgstr "" +msgstr "代码" #: ../../Structural/DataMapper/README.rst:36 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "你可以在 `GitHub`_ 上找到这些代码" #: ../../Structural/DataMapper/README.rst:38 msgid "User.php" @@ -70,7 +78,7 @@ msgstr "" #: ../../Structural/DataMapper/README.rst:51 msgid "Test" -msgstr "" +msgstr "测试" #: ../../Structural/DataMapper/README.rst:53 msgid "Tests/DataMapperTest.php" diff --git a/locale/zh_CN/LC_MESSAGES/Structural/DependencyInjection/README.po b/locale/zh_CN/LC_MESSAGES/Structural/DependencyInjection/README.po index 5111f59..426e487 100644 --- a/locale/zh_CN/LC_MESSAGES/Structural/DependencyInjection/README.po +++ b/locale/zh_CN/LC_MESSAGES/Structural/DependencyInjection/README.po @@ -13,7 +13,7 @@ msgstr "" #: ../../Structural/DependencyInjection/README.rst:2 msgid "`Dependency Injection`__" -msgstr "`依赖注入`__" +msgstr "`依赖注入`" #: ../../Structural/DependencyInjection/README.rst:5 msgid "Purpose" diff --git a/locale/zh_CN/LC_MESSAGES/Structural/Registry/README.po b/locale/zh_CN/LC_MESSAGES/Structural/Registry/README.po index 843138c..636207b 100644 --- a/locale/zh_CN/LC_MESSAGES/Structural/Registry/README.po +++ b/locale/zh_CN/LC_MESSAGES/Structural/Registry/README.po @@ -1,4 +1,4 @@ -# +# msgid "" msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" @@ -30,12 +30,6 @@ msgstr "" msgid "Examples" msgstr "" -#: ../../Structural/Registry/README.rst:14 -msgid "" -"Zend Framework: ``Zend_Registry`` holds the application's logger object, " -"front controller etc." -msgstr "" - #: ../../Structural/Registry/README.rst:16 msgid "" "Yii Framework: ``CWebApplication`` holds all the application components, " @@ -65,3 +59,14 @@ msgstr "" #: ../../Structural/Registry/README.rst:40 msgid "Tests/RegistryTest.php" msgstr "" + +#: ../../Structural/Registry/README.rst:14 +msgid "" +"Zend Framework 1: ``Zend_Registry`` holds the application's logger object, " +"front controller etc." +msgstr "" + +#~ msgid "" +#~ "Zend Framework: ``Zend_Registry`` holds the application's logger object, " +#~ "front controller etc." +#~ msgstr "" From af694a71b99d95797761127b094ee78ca0a9186a Mon Sep 17 00:00:00 2001 From: yplam Date: Mon, 14 Sep 2015 19:02:34 +0800 Subject: [PATCH 091/127] Translate Structural part to zh_CN. --- .../Structural/Decorator/README.po | 19 +++++++-------- .../LC_MESSAGES/Structural/Facade/README.po | 23 ++++++++++++------- .../Structural/FluentInterface/README.po | 21 +++++++++-------- .../LC_MESSAGES/Structural/Proxy/README.po | 18 ++++++++------- .../LC_MESSAGES/Structural/Registry/README.po | 19 +++++++++------ 5 files changed, 58 insertions(+), 42 deletions(-) diff --git a/locale/zh_CN/LC_MESSAGES/Structural/Decorator/README.po b/locale/zh_CN/LC_MESSAGES/Structural/Decorator/README.po index 0ecf351..e0c38b1 100644 --- a/locale/zh_CN/LC_MESSAGES/Structural/Decorator/README.po +++ b/locale/zh_CN/LC_MESSAGES/Structural/Decorator/README.po @@ -13,41 +13,42 @@ msgstr "" #: ../../Structural/Decorator/README.rst:2 msgid "`Decorator`__" -msgstr "" +msgstr "`装饰器`__" #: ../../Structural/Decorator/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "目的" #: ../../Structural/Decorator/README.rst:7 msgid "To dynamically add new functionality to class instances." -msgstr "" +msgstr "动态地为类的实例添加功能" #: ../../Structural/Decorator/README.rst:10 msgid "Examples" -msgstr "" +msgstr "例子" #: ../../Structural/Decorator/README.rst:12 msgid "Zend Framework: decorators for ``Zend_Form_Element`` instances" -msgstr "" +msgstr "Zend Framework: ``Zend_Form_Element`` 实例的装饰器" #: ../../Structural/Decorator/README.rst:13 msgid "" "Web Service Layer: Decorators JSON and XML for a REST service (in this case," " only one of these should be allowed of course)" msgstr "" +"Web Service层:REST服务的JSON与XML装饰器(当然,在此只能使用其中的一种)" #: ../../Structural/Decorator/README.rst:17 msgid "UML Diagram" -msgstr "" +msgstr "UML 图" #: ../../Structural/Decorator/README.rst:24 msgid "Code" -msgstr "" +msgstr "代码" #: ../../Structural/Decorator/README.rst:26 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "你可以在 `GitHub`_ 上找到这些代码" #: ../../Structural/Decorator/README.rst:28 msgid "RendererInterface.php" @@ -71,7 +72,7 @@ msgstr "" #: ../../Structural/Decorator/README.rst:59 msgid "Test" -msgstr "" +msgstr "测试" #: ../../Structural/Decorator/README.rst:61 msgid "Tests/DecoratorTest.php" diff --git a/locale/zh_CN/LC_MESSAGES/Structural/Facade/README.po b/locale/zh_CN/LC_MESSAGES/Structural/Facade/README.po index 1d78bf4..110cc58 100644 --- a/locale/zh_CN/LC_MESSAGES/Structural/Facade/README.po +++ b/locale/zh_CN/LC_MESSAGES/Structural/Facade/README.po @@ -13,11 +13,11 @@ msgstr "" #: ../../Structural/Facade/README.rst:2 msgid "`Facade`__" -msgstr "" +msgstr "`外观模式`__" #: ../../Structural/Facade/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "目的" #: ../../Structural/Facade/README.rst:7 msgid "" @@ -25,20 +25,23 @@ msgid "" "of a complex API. It's only a side-effect. The first goal is to reduce " "coupling and follow the Law of Demeter." msgstr "" +"外观模式的目的不是为了让你避免阅读烦人的API文档(当然,它有这样的作用)," +"它的主要目的是为了减少耦合并且遵循得墨忒耳定律(Law of Demeter)" #: ../../Structural/Facade/README.rst:11 msgid "" "A Facade is meant to decouple a client and a sub-system by embedding many " "(but sometimes just one) interface, and of course to reduce complexity." msgstr "" +"Facade通过嵌入多个(当然,有时只有一个)接口来解耦访客与子系统,当然也降低复杂度。" #: ../../Structural/Facade/README.rst:15 msgid "A facade does not forbid you the access to the sub-system" -msgstr "" +msgstr "Facade 不会禁止你访问子系统" #: ../../Structural/Facade/README.rst:16 msgid "You can (you should) have multiple facades for one sub-system" -msgstr "" +msgstr "你可以(应该)为一个子系统提供多个 Facade" #: ../../Structural/Facade/README.rst:18 msgid "" @@ -46,6 +49,8 @@ msgid "" "creations for each method, it is not a Facade, it's a Builder or a " "[Abstract\\|Static\\|Simple] Factory [Method]." msgstr "" +"因此一个好的 Facade 里面不会有 ``new`` 。如果每个方法里都要构造多个对象,那么它就" +"不是 Facade,而是生成器或者[抽象\\|静态\\|简单] 工厂 [方法]。" #: ../../Structural/Facade/README.rst:22 msgid "" @@ -53,18 +58,20 @@ msgid "" "parameters. If you need creation of new instances, use a Factory as " "argument." msgstr "" +"优秀的 Facade 不会有 ``new``,并且构造函数参数是接口类型的。如果你需要创建一个新" +"实例,则在参数中传入一个工厂对象。" #: ../../Structural/Facade/README.rst:27 msgid "UML Diagram" -msgstr "" +msgstr "UML 图" #: ../../Structural/Facade/README.rst:34 msgid "Code" -msgstr "" +msgstr "代码" #: ../../Structural/Facade/README.rst:36 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "你可以在 `GitHub`_ 上找到这些代码" #: ../../Structural/Facade/README.rst:38 msgid "Facade.php" @@ -80,7 +87,7 @@ msgstr "" #: ../../Structural/Facade/README.rst:57 msgid "Test" -msgstr "" +msgstr "测试" #: ../../Structural/Facade/README.rst:59 msgid "Tests/FacadeTest.php" diff --git a/locale/zh_CN/LC_MESSAGES/Structural/FluentInterface/README.po b/locale/zh_CN/LC_MESSAGES/Structural/FluentInterface/README.po index 0e58551..f0cc8d8 100644 --- a/locale/zh_CN/LC_MESSAGES/Structural/FluentInterface/README.po +++ b/locale/zh_CN/LC_MESSAGES/Structural/FluentInterface/README.po @@ -13,45 +13,46 @@ msgstr "" #: ../../Structural/FluentInterface/README.rst:2 msgid "`Fluent Interface`__" -msgstr "" +msgstr "`连贯接口`__" #: ../../Structural/FluentInterface/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "目的" #: ../../Structural/FluentInterface/README.rst:7 msgid "" "To write code that is easy readable just like sentences in a natural " "language (like English)." msgstr "" +"用来编写易于阅读的代码,就像自然语言一样(如英语)" #: ../../Structural/FluentInterface/README.rst:11 msgid "Examples" -msgstr "" +msgstr "例子" #: ../../Structural/FluentInterface/README.rst:13 msgid "Doctrine2's QueryBuilder works something like that example class below" -msgstr "" +msgstr "Doctrine2 的 QueryBuilder,就像下面例子中类似" #: ../../Structural/FluentInterface/README.rst:15 msgid "PHPUnit uses fluent interfaces to build mock objects" -msgstr "" +msgstr "PHPUnit 使用连贯接口来创建 mock 对象" #: ../../Structural/FluentInterface/README.rst:16 msgid "Yii Framework: CDbCommand and CActiveRecord use this pattern, too" -msgstr "" +msgstr "Yii 框架:CDbCommand 与 CActiveRecord 也使用此模式" #: ../../Structural/FluentInterface/README.rst:19 msgid "UML Diagram" -msgstr "" +msgstr "UML 图" #: ../../Structural/FluentInterface/README.rst:26 msgid "Code" -msgstr "" +msgstr "代码" #: ../../Structural/FluentInterface/README.rst:28 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "你可以在 `GitHub`_ 上找到这些代码" #: ../../Structural/FluentInterface/README.rst:30 msgid "Sql.php" @@ -59,7 +60,7 @@ msgstr "" #: ../../Structural/FluentInterface/README.rst:37 msgid "Test" -msgstr "" +msgstr "测试" #: ../../Structural/FluentInterface/README.rst:39 msgid "Tests/FluentInterfaceTest.php" diff --git a/locale/zh_CN/LC_MESSAGES/Structural/Proxy/README.po b/locale/zh_CN/LC_MESSAGES/Structural/Proxy/README.po index 290eacc..5df1caf 100644 --- a/locale/zh_CN/LC_MESSAGES/Structural/Proxy/README.po +++ b/locale/zh_CN/LC_MESSAGES/Structural/Proxy/README.po @@ -13,19 +13,19 @@ msgstr "" #: ../../Structural/Proxy/README.rst:2 msgid "`Proxy`__" -msgstr "" +msgstr "`代理模式`__" #: ../../Structural/Proxy/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "目的" #: ../../Structural/Proxy/README.rst:7 msgid "To interface to anything that is expensive or impossible to duplicate." -msgstr "" +msgstr "为昂贵或者无法复制的资源提供接口。" #: ../../Structural/Proxy/README.rst:10 msgid "Examples" -msgstr "" +msgstr "例子" #: ../../Structural/Proxy/README.rst:12 msgid "" @@ -33,18 +33,20 @@ msgid "" "initialization) in them, while the user still works with his own entity " "classes and will never use nor touch the proxies" msgstr "" +"Doctrine2 使用代理来实现框架特性(如延迟初始化),同时用户还是使用自己的实体类" +"并且不会使用或者接触到代理" #: ../../Structural/Proxy/README.rst:17 msgid "UML Diagram" -msgstr "" +msgstr "UML 图" #: ../../Structural/Proxy/README.rst:24 msgid "Code" -msgstr "" +msgstr "代码" #: ../../Structural/Proxy/README.rst:26 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "你可以在 `GitHub`_ 上找到这些代码" #: ../../Structural/Proxy/README.rst:28 msgid "Record.php" @@ -56,4 +58,4 @@ msgstr "" #: ../../Structural/Proxy/README.rst:41 msgid "Test" -msgstr "" +msgstr "测试" diff --git a/locale/zh_CN/LC_MESSAGES/Structural/Registry/README.po b/locale/zh_CN/LC_MESSAGES/Structural/Registry/README.po index 636207b..f01d956 100644 --- a/locale/zh_CN/LC_MESSAGES/Structural/Registry/README.po +++ b/locale/zh_CN/LC_MESSAGES/Structural/Registry/README.po @@ -13,11 +13,11 @@ msgstr "" #: ../../Structural/Registry/README.rst:2 msgid "`Registry`__" -msgstr "" +msgstr "`注册模式`__" #: ../../Structural/Registry/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "目的" #: ../../Structural/Registry/README.rst:7 msgid "" @@ -25,28 +25,32 @@ msgid "" "application, is typically implemented using an abstract class with only " "static methods (or using the Singleton pattern)" msgstr "" +"为应用中常用的对象实现一个中央存储,通常用一个只有静态方法的抽象类来实现" +"(或者使用单例模式)" #: ../../Structural/Registry/README.rst:12 msgid "Examples" -msgstr "" +msgstr "例子" #: ../../Structural/Registry/README.rst:16 msgid "" "Yii Framework: ``CWebApplication`` holds all the application components, " "such as ``CWebUser``, ``CUrlManager``, etc." msgstr "" +"Yii 框架: ``CWebApplication`` 持有所有的应用组件," +"如 ``CWebUser``, ``CUrlManager``, 等。" #: ../../Structural/Registry/README.rst:20 msgid "UML Diagram" -msgstr "" +msgstr "UML 图" #: ../../Structural/Registry/README.rst:27 msgid "Code" -msgstr "" +msgstr "代码" #: ../../Structural/Registry/README.rst:29 msgid "You can also find these code on `GitHub`_" -msgstr "" +msgstr "你可以在 `GitHub`_ 上找到这些代码" #: ../../Structural/Registry/README.rst:31 msgid "Registry.php" @@ -54,7 +58,7 @@ msgstr "" #: ../../Structural/Registry/README.rst:38 msgid "Test" -msgstr "" +msgstr "测试" #: ../../Structural/Registry/README.rst:40 msgid "Tests/RegistryTest.php" @@ -65,6 +69,7 @@ msgid "" "Zend Framework 1: ``Zend_Registry`` holds the application's logger object, " "front controller etc." msgstr "" +"Zend Framework 1: ``Zend_Registry`` 持有应用的logger对象,前端控制器等。" #~ msgid "" #~ "Zend Framework: ``Zend_Registry`` holds the application's logger object, " From d703a87fe8f864b8fdb4967161572ed965ddc95a Mon Sep 17 00:00:00 2001 From: Brett Santore Date: Mon, 14 Sep 2015 11:00:03 -0400 Subject: [PATCH 092/127] Add assertions to AdapterTest --- Structural/Adapter/Tests/AdapterTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Structural/Adapter/Tests/AdapterTest.php b/Structural/Adapter/Tests/AdapterTest.php index 258e755..ecbc9e2 100644 --- a/Structural/Adapter/Tests/AdapterTest.php +++ b/Structural/Adapter/Tests/AdapterTest.php @@ -35,7 +35,7 @@ class AdapterTest extends \PHPUnit_Framework_TestCase */ public function testIAmAnOldClient(PaperBookInterface $book) { - $book->open(); - $book->turnPage(); + $this->assertTrue(method_exists($book, 'open')); + $this->assertTrue(method_exists($book, 'turnPage')); } } From bb469bd4494bf7a819b86be14fcceb09c34326ec Mon Sep 17 00:00:00 2001 From: Brett Santore Date: Mon, 14 Sep 2015 11:13:28 -0400 Subject: [PATCH 093/127] move comments to line above --- Behavioral/Memento/Tests/MementoTest.php | 60 ++++++++++++++++-------- 1 file changed, 40 insertions(+), 20 deletions(-) diff --git a/Behavioral/Memento/Tests/MementoTest.php b/Behavioral/Memento/Tests/MementoTest.php index ccc2097..3ea82b1 100644 --- a/Behavioral/Memento/Tests/MementoTest.php +++ b/Behavioral/Memento/Tests/MementoTest.php @@ -18,29 +18,45 @@ class MementoTest extends \PHPUnit_Framework_TestCase $caretaker = new Caretaker(); $character = new \stdClass(); - $character->name = "Gandalf"; // new object - $originator->setState($character); // connect Originator to character object + // new object + $character->name = "Gandalf"; + // connect Originator to character object + $originator->setState($character); - $character->name = "Gandalf the Grey"; // work on the object - $character->race = "Maia"; // still change something - $snapshot = $originator->getStateAsMemento(); // time to save state - $caretaker->saveToHistory($snapshot); // put state to log + // work on the object + $character->name = "Gandalf the Grey"; + // still change something + $character->race = "Maia"; + // time to save state + $snapshot = $originator->getStateAsMemento(); + // put state to log + $caretaker->saveToHistory($snapshot); - $character->name = "Sauron"; // change something - $character->race = "Ainur"; // and again - $this->assertAttributeEquals($character, "state", $originator); // state inside the Originator was equally changed + // change something + $character->name = "Sauron"; + // and again + $character->race = "Ainur"; + // state inside the Originator was equally changed + $this->assertAttributeEquals($character, "state", $originator); - $snapshot = $originator->getStateAsMemento(); // time to save another state - $caretaker->saveToHistory($snapshot); // put state to log + // time to save another state + $snapshot = $originator->getStateAsMemento(); + // put state to log + $caretaker->saveToHistory($snapshot); $rollback = $caretaker->getFromHistory(0); - $originator->restoreFromMemento($rollback); // return to first state - $character = $rollback->getState(); // use character from old state + // return to first state + $originator->restoreFromMemento($rollback); + // use character from old state + $character = $rollback->getState(); - $this->assertEquals("Gandalf the Grey", $character->name); // yes, that what we need - $character->name = "Gandalf the White"; // make new changes + // yes, that what we need + $this->assertEquals("Gandalf the Grey", $character->name); + // make new changes + $character->name = "Gandalf the White"; - $this->assertAttributeEquals($character, "state", $originator); // and Originator linked to actual object again + // and Originator linked to actual object again + $this->assertAttributeEquals($character, "state", $originator); } public function testStringState() @@ -88,14 +104,18 @@ class MementoTest extends \PHPUnit_Framework_TestCase $snapshot = $originator->getStateAsMemento(); $second_state = $snapshot->getState(); - $first_state->first_property = 1; // still actual - $second_state->second_property = 2; // just history + // still actual + $first_state->first_property = 1; + // just history + $second_state->second_property = 2; $this->assertAttributeEquals($first_state, "state", $originator); $this->assertAttributeNotEquals($second_state, "state", $originator); $originator->restoreFromMemento($snapshot); - $first_state->first_property = 11; // now it lost state - $second_state->second_property = 22; // must be actual + // now it lost state + $first_state->first_property = 11; + // must be actual + $second_state->second_property = 22; $this->assertAttributeEquals($second_state, "state", $originator); $this->assertAttributeNotEquals($first_state, "state", $originator); } From 139c2c157c644b2b58a0dc57c1b7c31ee7016c5c Mon Sep 17 00:00:00 2001 From: Brett Santore Date: Mon, 14 Sep 2015 11:14:09 -0400 Subject: [PATCH 094/127] move closing brace to line after body --- Behavioral/Memento/Caretaker.php | 1 - 1 file changed, 1 deletion(-) diff --git a/Behavioral/Memento/Caretaker.php b/Behavioral/Memento/Caretaker.php index 3a16fcd..72530fb 100644 --- a/Behavioral/Memento/Caretaker.php +++ b/Behavioral/Memento/Caretaker.php @@ -46,5 +46,4 @@ class Caretaker return $originator->getStateAsMemento()->getState(); } - } From ac7cca74cda96a8b3dbdb9ab62d09c07befead80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Gonz=C3=A1lez=20Cervi=C3=B1o?= Date: Tue, 15 Sep 2015 18:03:36 +0200 Subject: [PATCH 095/127] [spanish translation] - wip - creational patterns --- .../Creational/AbstractFactory/README.po | 24 +++++++------- .../LC_MESSAGES/Creational/Builder/README.po | 30 ++++++++--------- .../Creational/FactoryMethod/README.po | 33 +++++++++++-------- .../LC_MESSAGES/Creational/Multiton/README.po | 23 ++++++++----- 4 files changed, 60 insertions(+), 50 deletions(-) diff --git a/locale/es/LC_MESSAGES/Creational/AbstractFactory/README.po b/locale/es/LC_MESSAGES/Creational/AbstractFactory/README.po index 3325520..821c5b5 100644 --- a/locale/es/LC_MESSAGES/Creational/AbstractFactory/README.po +++ b/locale/es/LC_MESSAGES/Creational/AbstractFactory/README.po @@ -48,48 +48,48 @@ msgstr "Puedes encontrar el código en `GitHub`_" #: ../../Creational/AbstractFactory/README.rst:24 msgid "AbstractFactory.php" -msgstr "" +msgstr "AbstractFactory.php" #: ../../Creational/AbstractFactory/README.rst:30 msgid "JsonFactory.php" -msgstr "" +msgstr "JsonFactory.php" #: ../../Creational/AbstractFactory/README.rst:36 msgid "HtmlFactory.php" -msgstr "" +msgstr "HtmlFactory.php" #: ../../Creational/AbstractFactory/README.rst:42 msgid "MediaInterface.php" -msgstr "" +msgstr "MediaInterface.php" #: ../../Creational/AbstractFactory/README.rst:48 msgid "Picture.php" -msgstr "" +msgstr "Picture.php" #: ../../Creational/AbstractFactory/README.rst:54 msgid "Text.php" -msgstr "" +msgstr "Text.php" #: ../../Creational/AbstractFactory/README.rst:60 msgid "Json/Picture.php" -msgstr "" +msgstr "Json/Picture.php" #: ../../Creational/AbstractFactory/README.rst:66 msgid "Json/Text.php" -msgstr "" +msgstr "Json/Text.php" #: ../../Creational/AbstractFactory/README.rst:72 msgid "Html/Picture.php" -msgstr "" +msgstr "Html/Picture.php" #: ../../Creational/AbstractFactory/README.rst:78 msgid "Html/Text.php" -msgstr "" +msgstr "Html/Text.php" #: ../../Creational/AbstractFactory/README.rst:85 msgid "Test" -msgstr "" +msgstr "Test" #: ../../Creational/AbstractFactory/README.rst:87 msgid "Tests/AbstractFactoryTest.php" -msgstr "" +msgstr "Tests/AbstractFactoryTest.php" diff --git a/locale/es/LC_MESSAGES/Creational/Builder/README.po b/locale/es/LC_MESSAGES/Creational/Builder/README.po index 69824fb..0cbdd58 100644 --- a/locale/es/LC_MESSAGES/Creational/Builder/README.po +++ b/locale/es/LC_MESSAGES/Creational/Builder/README.po @@ -4,7 +4,7 @@ msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: 2015-09-10 10:12+0100\n" +"PO-Revision-Date: 2015-09-11 11:42+0100\n" "Last-Translator: Daniel González \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,7 +20,7 @@ msgstr "`Constructor`__" #: ../../Creational/Builder/README.rst:5 msgid "Purpose" -msgstr "Proposito" +msgstr "Propósito" #: ../../Creational/Builder/README.rst:7 msgid "Builder is an interface that build parts of a complex object." @@ -58,7 +58,7 @@ msgstr "Ejemplos" #: ../../Creational/Builder/README.rst:21 msgid "PHPUnit: Mock Builder" -msgstr "" +msgstr "PHPUnit: Mock Builder" #: ../../Creational/Builder/README.rst:24 msgid "UML Diagram" @@ -74,48 +74,48 @@ msgstr "Puedes encontrar el código en `GitHub`_" #: ../../Creational/Builder/README.rst:35 msgid "Director.php" -msgstr "" +msgstr "Director.php" #: ../../Creational/Builder/README.rst:41 msgid "BuilderInterface.php" -msgstr "" +msgstr "BuilderInterface.php" #: ../../Creational/Builder/README.rst:47 msgid "BikeBuilder.php" -msgstr "" +msgstr "BikeBuilder.php" #: ../../Creational/Builder/README.rst:53 msgid "CarBuilder.php" -msgstr "" +msgstr "CarBuilder.php" #: ../../Creational/Builder/README.rst:59 msgid "Parts/Vehicle.php" -msgstr "" +msgstr "Parts/Vehicle.php" #: ../../Creational/Builder/README.rst:65 msgid "Parts/Bike.php" -msgstr "" +msgstr "Parts/Bike.php" #: ../../Creational/Builder/README.rst:71 msgid "Parts/Car.php" -msgstr "" +msgstr "Parts/Car.php" #: ../../Creational/Builder/README.rst:77 msgid "Parts/Engine.php" -msgstr "" +msgstr "Parts/Engine.php" #: ../../Creational/Builder/README.rst:83 msgid "Parts/Wheel.php" -msgstr "" +msgstr "Parts/Wheel.php" #: ../../Creational/Builder/README.rst:89 msgid "Parts/Door.php" -msgstr "" +msgstr "Parts/Door.php" #: ../../Creational/Builder/README.rst:96 msgid "Test" -msgstr "" +msgstr "Test" #: ../../Creational/Builder/README.rst:98 msgid "Tests/DirectorTest.php" -msgstr "" +msgstr "Tests/DirectorTest.php" diff --git a/locale/es/LC_MESSAGES/Creational/FactoryMethod/README.po b/locale/es/LC_MESSAGES/Creational/FactoryMethod/README.po index 4ccb9a1..550573a 100644 --- a/locale/es/LC_MESSAGES/Creational/FactoryMethod/README.po +++ b/locale/es/LC_MESSAGES/Creational/FactoryMethod/README.po @@ -4,7 +4,7 @@ msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: 2015-09-10 10:02+0100\n" +"PO-Revision-Date: 2015-09-15 17:15+0100\n" "Last-Translator: Daniel González \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -15,17 +15,19 @@ msgstr "" #: ../../Creational/FactoryMethod/README.rst:2 msgid "`Factory Method`__" -msgstr "" +msgstr "`Factory Method`__" #: ../../Creational/FactoryMethod/README.rst:5 msgid "Purpose" -msgstr "" +msgstr "Proposito" #: ../../Creational/FactoryMethod/README.rst:7 msgid "" "The good point over the SimpleFactory is you can subclass it to implement " "different ways to create objects" msgstr "" +"La principal ventaja de SimpleFactory es que puedes extender la clase para " +"implementar diferentes formas" #: ../../Creational/FactoryMethod/README.rst:10 msgid "For simple case, this abstract class could be just an interface" @@ -42,14 +44,17 @@ msgid "" "It means the FactoryMethod class depends on abstractions, not concrete " "classes. This is the real trick compared to SimpleFactory or StaticFactory." msgstr "" +"Esto significa que la clase FactoryMethod depende de abstraciones, no de " +"clases concretas. Esto es el truco con respecto a SimpleFactory o " +"StaticFactory" #: ../../Creational/FactoryMethod/README.rst:20 msgid "UML Diagram" -msgstr "" +msgstr "Diagrama UML" #: ../../Creational/FactoryMethod/README.rst:27 msgid "Code" -msgstr "" +msgstr "Código" #: ../../Creational/FactoryMethod/README.rst:29 msgid "You can also find these code on `GitHub`_" @@ -57,36 +62,36 @@ msgstr "Puedes encontrar el código en `GitHub`_" #: ../../Creational/FactoryMethod/README.rst:31 msgid "FactoryMethod.php" -msgstr "" +msgstr "FactoryMethod.php" #: ../../Creational/FactoryMethod/README.rst:37 msgid "ItalianFactory.php" -msgstr "" +msgstr "ItalianFactory.php" #: ../../Creational/FactoryMethod/README.rst:43 msgid "GermanFactory.php" -msgstr "" +msgstr "GermanFactory.php" #: ../../Creational/FactoryMethod/README.rst:49 msgid "VehicleInterface.php" -msgstr "" +msgstr "VehicleInterface.php" #: ../../Creational/FactoryMethod/README.rst:55 msgid "Porsche.php" -msgstr "" +msgstr "Porsche.php" #: ../../Creational/FactoryMethod/README.rst:61 msgid "Bicycle.php" -msgstr "" +msgstr "Bicycle.php" #: ../../Creational/FactoryMethod/README.rst:67 msgid "Ferrari.php" -msgstr "" +msgstr "Ferrari.php" #: ../../Creational/FactoryMethod/README.rst:74 msgid "Test" -msgstr "" +msgstr "Test" #: ../../Creational/FactoryMethod/README.rst:76 msgid "Tests/FactoryMethodTest.php" -msgstr "" +msgstr "Tests/FactoryMethodTest.php" diff --git a/locale/es/LC_MESSAGES/Creational/Multiton/README.po b/locale/es/LC_MESSAGES/Creational/Multiton/README.po index d465309..c32fbaa 100644 --- a/locale/es/LC_MESSAGES/Creational/Multiton/README.po +++ b/locale/es/LC_MESSAGES/Creational/Multiton/README.po @@ -4,7 +4,7 @@ msgstr "" "Project-Id-Version: DesignPatternsPHP 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-29 12:18+0200\n" -"PO-Revision-Date: 2015-09-10 10:02+0100\n" +"PO-Revision-Date: 2015-09-11 11:31+0100\n" "Last-Translator: Daniel González \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -15,43 +15,48 @@ msgstr "" #: ../../Creational/Multiton/README.rst:2 msgid "Multiton" -msgstr "" +msgstr "Multiton" #: ../../Creational/Multiton/README.rst:4 msgid "" "**THIS IS CONSIDERED TO BE AN ANTI-PATTERN! FOR BETTER TESTABILITY AND " "MAINTAINABILITY USE DEPENDENCY INJECTION!**" msgstr "" +"**ESTO ES CONSIDERADO UN ANTI-PATRÓN. PARA MEJOR TESTEABILIDAD Y " +"MANTENIBILIDAD USA INYECCIÓN DE DEPENDENCIAS**" #: ../../Creational/Multiton/README.rst:8 msgid "Purpose" -msgstr "" +msgstr "Propósito" #: ../../Creational/Multiton/README.rst:10 msgid "" "To have only a list of named instances that are used, like a singleton but " "with n instances." msgstr "" +"Tener una única lista de los nombres de las instancias que has usando, como " +"en el singleton pero con varias instancias." #: ../../Creational/Multiton/README.rst:14 msgid "Examples" -msgstr "" +msgstr "Ejemplos" #: ../../Creational/Multiton/README.rst:16 msgid "2 DB Connectors, e.g. one for MySQL, the other for SQLite" -msgstr "" +msgstr "2 Conectores de base de datos, Ej. uno para MySQL el otro para SQLite." #: ../../Creational/Multiton/README.rst:17 msgid "multiple Loggers (one for debug messages, one for errors)" msgstr "" +"Múltiples sistemas de log ( no para mensajes de debug, uno para errores )." #: ../../Creational/Multiton/README.rst:20 msgid "UML Diagram" -msgstr "" +msgstr "Diagrama UML" #: ../../Creational/Multiton/README.rst:27 msgid "Code" -msgstr "" +msgstr "Código" #: ../../Creational/Multiton/README.rst:29 msgid "You can also find these code on `GitHub`_" @@ -59,8 +64,8 @@ msgstr "Puedes encontrar el código en `GitHub`_" #: ../../Creational/Multiton/README.rst:31 msgid "Multiton.php" -msgstr "" +msgstr "Multiton.php" #: ../../Creational/Multiton/README.rst:38 msgid "Test" -msgstr "" +msgstr "Test" From ac30d388a4e6af3a4b4667eecf02353b1597bfc9 Mon Sep 17 00:00:00 2001 From: SHANG Guokan Date: Fri, 2 Oct 2015 15:43:40 +0200 Subject: [PATCH 096/127] Update README.po --- locale/es/LC_MESSAGES/Creational/AbstractFactory/README.po | 1 - 1 file changed, 1 deletion(-) diff --git a/locale/es/LC_MESSAGES/Creational/AbstractFactory/README.po b/locale/es/LC_MESSAGES/Creational/AbstractFactory/README.po index 821c5b5..8c9340b 100644 --- a/locale/es/LC_MESSAGES/Creational/AbstractFactory/README.po +++ b/locale/es/LC_MESSAGES/Creational/AbstractFactory/README.po @@ -8,7 +8,6 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es\n" -"PO-Revision-Date: \n" "Last-Translator: Daniel González \n" "Language-Team: \n" "X-Generator: Poedit 1.5.4\n" From 326da7c6c013a42461e29357c79f41321afaa0cc Mon Sep 17 00:00:00 2001 From: brslv Date: Tue, 13 Oct 2015 11:14:50 +0300 Subject: [PATCH 097/127] fix link in behavioral readme file. --- Behavioral/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Behavioral/README.md b/Behavioral/README.md index bdf7316..b98202b 100644 --- a/Behavioral/README.md +++ b/Behavioral/README.md @@ -9,7 +9,7 @@ communication. * [Command](Command) [:notebook:](http://en.wikipedia.org/wiki/Command_pattern) * [Iterator](Iterator) [:notebook:](http://en.wikipedia.org/wiki/Iterator_pattern) * [Mediator](Mediator) [:notebook:](http://en.wikipedia.org/wiki/Mediator_pattern) -* [Memento](Behavioral/Memento) [:notebook:](http://en.wikipedia.org/wiki/Memento_pattern) +* [Memento](Memento) [:notebook:](http://en.wikipedia.org/wiki/Memento_pattern) * [NullObject](NullObject) [:notebook:](http://en.wikipedia.org/wiki/Null_Object_pattern) * [Observer](Observer) [:notebook:](http://en.wikipedia.org/wiki/Observer_pattern) * [Specification](Specification) [:notebook:](http://en.wikipedia.org/wiki/Specification_pattern) From 3cb0f4bd8b52a32dc498c13659a0931535cb8f61 Mon Sep 17 00:00:00 2001 From: 3kthor3adward <3kthor3adward@gmail.com> Date: Tue, 20 Oct 2015 16:58:37 -0500 Subject: [PATCH 098/127] Fix typo --- Behavioral/ChainOfResponsibilities/Responsible/SlowStorage.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Behavioral/ChainOfResponsibilities/Responsible/SlowStorage.php b/Behavioral/ChainOfResponsibilities/Responsible/SlowStorage.php index bf21088..127b7fc 100644 --- a/Behavioral/ChainOfResponsibilities/Responsible/SlowStorage.php +++ b/Behavioral/ChainOfResponsibilities/Responsible/SlowStorage.php @@ -10,7 +10,7 @@ use DesignPatterns\Behavioral\ChainOfResponsibilities\Request; * * One important fact about CoR: each item in the chain MUST NOT assume its position * in the chain. A CoR is not responsible if the request is not handled UNLESS - * you make an "ExceptionHandler" which throws execption if the request goes there. + * you make an "ExceptionHandler" which throws exception if the request goes there. * * To be really extendable, each handler doesn't know if there is something after it. * From 97eecc59a501536abc8004762fa224eefe43ce7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=83=AB=E3=82=AB=E3=82=B9?= Date: Mon, 19 Oct 2015 22:04:57 -0200 Subject: [PATCH 099/127] Add EAV pattern to readme.md file --- More/README.md | 1 + README.md | 1 + 2 files changed, 2 insertions(+) diff --git a/More/README.md b/More/README.md index 7667a62..599ae03 100644 --- a/More/README.md +++ b/More/README.md @@ -3,3 +3,4 @@ * [Delegation](Delegation) [:notebook:](http://en.wikipedia.org/wiki/Delegation_pattern) * [ServiceLocator](ServiceLocator) [:notebook:](http://en.wikipedia.org/wiki/Service_locator_pattern) * [Repository](Repository) +* [EAV](More/EAV) [:notebook:](https://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model) diff --git a/README.md b/README.md index 65d71d7..440185f 100755 --- a/README.md +++ b/README.md @@ -87,6 +87,7 @@ The patterns can be structured in roughly three different categories. Please cli * [Delegation](More/Delegation) [:notebook:](http://en.wikipedia.org/wiki/Delegation_pattern) * [ServiceLocator](More/ServiceLocator) [:notebook:](http://en.wikipedia.org/wiki/Service_locator_pattern) * [Repository](More/Repository) +* [EAV](More/EAV) [:notebook:](https://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model) ## Contribute From fc1544707c574a8da809f3fe8c957331b406efc0 Mon Sep 17 00:00:00 2001 From: Jon Gotlin Date: Tue, 3 Nov 2015 07:28:45 +0100 Subject: [PATCH 100/127] Corrected copy-and-pasted comment --- Structural/Decorator/Tests/DecoratorTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Structural/Decorator/Tests/DecoratorTest.php b/Structural/Decorator/Tests/DecoratorTest.php index 437f068..c50181f 100644 --- a/Structural/Decorator/Tests/DecoratorTest.php +++ b/Structural/Decorator/Tests/DecoratorTest.php @@ -27,7 +27,7 @@ class DecoratorTest extends \PHPUnit_Framework_TestCase public function testXmlDecorator() { - // Wrap service with a JSON decorator for renderers + // Wrap service with a XML decorator for renderers $service = new Decorator\RenderInXml($this->service); // Our Renderer will now output XML instead of an array $xml = 'bar'; From 115dd3bdb327751b615015f2384b32ccb78f7328 Mon Sep 17 00:00:00 2001 From: ftwbzhao Date: Mon, 16 Nov 2015 13:52:07 +0800 Subject: [PATCH 101/127] [EAV] Value::setAttribute add return this --- More/EAV/Tests/ValueTest.php | 3 +-- More/EAV/Value.php | 3 +++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/More/EAV/Tests/ValueTest.php b/More/EAV/Tests/ValueTest.php index 1b96521..cecf600 100644 --- a/More/EAV/Tests/ValueTest.php +++ b/More/EAV/Tests/ValueTest.php @@ -40,7 +40,6 @@ class ValueTest extends \PHPUnit_Framework_TestCase $value->setName('Silver'); $this->assertSame($attribute, $value->getAttribute()); - $value->setAttribute($attribute); - $this->assertSame($attribute, $value->getAttribute()); + $this->assertSame($attribute, $value->setAttribute($attribute)->getAttribute()); } } diff --git a/More/EAV/Value.php b/More/EAV/Value.php index 617afdc..127f8ce 100644 --- a/More/EAV/Value.php +++ b/More/EAV/Value.php @@ -28,12 +28,15 @@ class Value implements ValueInterface /** * @param Attribute $attribute + * @return $this */ public function setAttribute(Attribute $attribute) { $this->attribute->removeValue($this); // Remove value from current attribute $attribute->addValue($this); // Add value to new attribute $this->attribute = $attribute; + + return $this; } /** From ba63419d83289698d9ca1158916d3ae097c015b2 Mon Sep 17 00:00:00 2001 From: ftwbzhao Date: Mon, 16 Nov 2015 22:36:46 +0800 Subject: [PATCH 102/127] [EAV] keep unit test code consistency --- More/EAV/Tests/ValueTest.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/More/EAV/Tests/ValueTest.php b/More/EAV/Tests/ValueTest.php index cecf600..1b96521 100644 --- a/More/EAV/Tests/ValueTest.php +++ b/More/EAV/Tests/ValueTest.php @@ -40,6 +40,7 @@ class ValueTest extends \PHPUnit_Framework_TestCase $value->setName('Silver'); $this->assertSame($attribute, $value->getAttribute()); - $this->assertSame($attribute, $value->setAttribute($attribute)->getAttribute()); + $value->setAttribute($attribute); + $this->assertSame($attribute, $value->getAttribute()); } } From 620c9040a89fb2d5a58744f5c186872d9528a769 Mon Sep 17 00:00:00 2001 From: Dominik Liebler Date: Wed, 18 Nov 2015 08:14:13 +0100 Subject: [PATCH 103/127] updated phpunit to 4.8.18 which also works with php <= 5.3.3 --- composer.json | 2 +- composer.lock | 68 +++++++++++++++++++++++++-------------------------- 2 files changed, 34 insertions(+), 36 deletions(-) diff --git a/composer.json b/composer.json index 230ea33..71610e4 100644 --- a/composer.json +++ b/composer.json @@ -9,7 +9,7 @@ ], "minimum-stability": "stable", "require-dev": { - "phpunit/phpunit": "~4.6", + "phpunit/phpunit": "^4.6", "squizlabs/php_codesniffer": "1.5.*" }, "autoload": { diff --git a/composer.lock b/composer.lock index aac9505..202b73e 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "b2d8b0e179e33882664013cfe68f65f8", + "hash": "ccc9bc820717ca4dc310248ad4a69f21", + "content-hash": "f9ca7d34db86fa55e8dc649f84d8b4c7", "packages": [], "packages-dev": [ { @@ -172,16 +173,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "2.2.2", + "version": "2.2.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2d7c03c0e4e080901b8f33b2897b0577be18a13c" + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2d7c03c0e4e080901b8f33b2897b0577be18a13c", - "reference": "2d7c03c0e4e080901b8f33b2897b0577be18a13c", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", "shasum": "" }, "require": { @@ -230,7 +231,7 @@ "testing", "xunit" ], - "time": "2015-08-04 03:42:39" + "time": "2015-10-06 15:47:00" }, { "name": "phpunit/php-file-iterator", @@ -363,16 +364,16 @@ }, { "name": "phpunit/php-token-stream", - "version": "1.4.6", + "version": "1.4.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "3ab72c62e550370a6cd5dc873e1a04ab57562f5b" + "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3ab72c62e550370a6cd5dc873e1a04ab57562f5b", - "reference": "3ab72c62e550370a6cd5dc873e1a04ab57562f5b", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", + "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", "shasum": "" }, "require": { @@ -408,20 +409,20 @@ "keywords": [ "tokenizer" ], - "time": "2015-08-16 08:51:00" + "time": "2015-09-15 10:49:45" }, { "name": "phpunit/phpunit", - "version": "4.8.6", + "version": "4.8.18", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "2246830f4a1a551c67933e4171bf2126dc29d357" + "reference": "fa33d4ad96481b91df343d83e8c8aabed6b1dfd3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2246830f4a1a551c67933e4171bf2126dc29d357", - "reference": "2246830f4a1a551c67933e4171bf2126dc29d357", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fa33d4ad96481b91df343d83e8c8aabed6b1dfd3", + "reference": "fa33d4ad96481b91df343d83e8c8aabed6b1dfd3", "shasum": "" }, "require": { @@ -480,20 +481,20 @@ "testing", "xunit" ], - "time": "2015-08-24 04:09:38" + "time": "2015-11-11 11:32:49" }, { "name": "phpunit/phpunit-mock-objects", - "version": "2.3.7", + "version": "2.3.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "5e2645ad49d196e020b85598d7c97e482725786a" + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/5e2645ad49d196e020b85598d7c97e482725786a", - "reference": "5e2645ad49d196e020b85598d7c97e482725786a", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", "shasum": "" }, "require": { @@ -536,7 +537,7 @@ "mock", "xunit" ], - "time": "2015-08-19 09:14:08" + "time": "2015-10-02 06:51:40" }, { "name": "sebastian/comparator", @@ -772,16 +773,16 @@ }, { "name": "sebastian/global-state", - "version": "1.0.0", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01" + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/c7428acdb62ece0a45e6306f1ae85e1c05b09c01", - "reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", "shasum": "" }, "require": { @@ -819,7 +820,7 @@ "keywords": [ "global state" ], - "time": "2014-10-06 09:23:50" + "time": "2015-10-12 03:26:01" }, { "name": "sebastian/recursion-context", @@ -986,24 +987,21 @@ }, { "name": "symfony/yaml", - "version": "v2.7.3", + "version": "v2.7.6", "source": { "type": "git", - "url": "https://github.com/symfony/Yaml.git", - "reference": "71340e996171474a53f3d29111d046be4ad8a0ff" + "url": "https://github.com/symfony/yaml.git", + "reference": "eca9019c88fbe250164affd107bc8057771f3f4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/Yaml/zipball/71340e996171474a53f3d29111d046be4ad8a0ff", - "reference": "71340e996171474a53f3d29111d046be4ad8a0ff", + "url": "https://api.github.com/repos/symfony/yaml/zipball/eca9019c88fbe250164affd107bc8057771f3f4d", + "reference": "eca9019c88fbe250164affd107bc8057771f3f4d", "shasum": "" }, "require": { "php": ">=5.3.9" }, - "require-dev": { - "symfony/phpunit-bridge": "~2.7" - }, "type": "library", "extra": { "branch-alias": { @@ -1031,7 +1029,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2015-07-28 14:07:07" + "time": "2015-10-11 09:39:48" } ], "aliases": [], From 1f21cc5d027732d2deaaa40bd4a19ad813e35e8b Mon Sep 17 00:00:00 2001 From: Pete Houston Date: Wed, 25 Nov 2015 10:36:30 +0700 Subject: [PATCH 104/127] Correct the EAV link --- More/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/More/README.md b/More/README.md index 599ae03..cba33e7 100644 --- a/More/README.md +++ b/More/README.md @@ -3,4 +3,4 @@ * [Delegation](Delegation) [:notebook:](http://en.wikipedia.org/wiki/Delegation_pattern) * [ServiceLocator](ServiceLocator) [:notebook:](http://en.wikipedia.org/wiki/Service_locator_pattern) * [Repository](Repository) -* [EAV](More/EAV) [:notebook:](https://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model) +* [EAV](EAV) [:notebook:](https://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model) From 0e774e3961e9ea08d11dd50a917b5fe612c27a1c Mon Sep 17 00:00:00 2001 From: ftwbzhao Date: Wed, 9 Dec 2015 18:01:17 +0800 Subject: [PATCH 105/127] [Repository] fix namespace --- More/Repository/MemoryStorage.php | 4 ++- More/Repository/Post.php | 2 +- More/Repository/PostRepository.php | 4 ++- More/Repository/Storage.php | 2 +- More/Repository/uml/Repository.uml | 56 +++++++++++++++--------------- 5 files changed, 36 insertions(+), 32 deletions(-) diff --git a/More/Repository/MemoryStorage.php b/More/Repository/MemoryStorage.php index 3021e96..1da09bc 100644 --- a/More/Repository/MemoryStorage.php +++ b/More/Repository/MemoryStorage.php @@ -1,6 +1,8 @@ - - PHP - \DesignPatterns\Repository\PostRepository - - \DesignPatterns\Repository\Storage - \DesignPatterns\Repository\MemoryStorage - \DesignPatterns\Repository\Post - \DesignPatterns\Repository\PostRepository - - - - - - - - - - - - Fields - Constants - Constructors - Methods - - private - - + + + PHP + \DesignPatterns\More\Repository\PostRepository + + \DesignPatterns\More\Repository\Storage + \DesignPatterns\More\Repository\MemoryStorage + \DesignPatterns\More\Repository\Post + \DesignPatterns\More\Repository\PostRepository + + + + + + + + + + + + Fields + Constants + Constructors + Methods + + private + + From 5533d8560ae4b6805e1f8544d3cb0bbb2e426ce5 Mon Sep 17 00:00:00 2001 From: Ju Date: Thu, 10 Dec 2015 00:13:07 +0100 Subject: [PATCH 106/127] Added usage example on Creational/SimpleFactory --- Creational/SimpleFactory/README.rst | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Creational/SimpleFactory/README.rst b/Creational/SimpleFactory/README.rst index 364947f..0525667 100644 --- a/Creational/SimpleFactory/README.rst +++ b/Creational/SimpleFactory/README.rst @@ -48,6 +48,15 @@ Scooter.php :language: php :linenos: +Usage +----- + +.. code:: php + + $factory = new ConcreteFactory(); + $bicycle = $factory->createVehicle('bicycle'); + $bicycle->driveTo('Paris'); + Test ---- From df060dab978cac3a0bcd6b002fe11d83f29fbf28 Mon Sep 17 00:00:00 2001 From: Marius Bogdan Date: Sat, 12 Dec 2015 22:44:19 +0100 Subject: [PATCH 107/127] Fixed wrong implementation of Singleton Pattern --- Creational/Singleton/Singleton.php | 12 +++++++---- .../SingletonPatternViolationException.php | 8 +++++++ Creational/Singleton/Tests/SingletonTest.php | 21 +++++++++++++++++++ 3 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 Creational/Singleton/SingletonPatternViolationException.php diff --git a/Creational/Singleton/Singleton.php b/Creational/Singleton/Singleton.php index 41a4569..94f7a0a 100644 --- a/Creational/Singleton/Singleton.php +++ b/Creational/Singleton/Singleton.php @@ -2,6 +2,8 @@ namespace DesignPatterns\Creational\Singleton; +use DesignPatterns\Creational\Singleton\SingletonPatternViolationException; + /** * class Singleton */ @@ -36,19 +38,21 @@ class Singleton /** * prevent the instance from being cloned - * + * @throws SingletonPatternViolationException * @return void */ - private function __clone() + public final function __clone() { + throw new SingletonPatternViolationException('This is a Singleton. Clone is forbidden'); } /** * prevent from being unserialized - * + * @throws SingletonPatternViolationException * @return void */ - private function __wakeup() + public final function __wakeup() { + throw new SingletonPatternViolationException('This is a Singleton. __wakeup usage is forbidden'); } } diff --git a/Creational/Singleton/SingletonPatternViolationException.php b/Creational/Singleton/SingletonPatternViolationException.php new file mode 100644 index 0000000..38be5e6 --- /dev/null +++ b/Creational/Singleton/SingletonPatternViolationException.php @@ -0,0 +1,8 @@ +getMethod('__construct'); $this->assertTrue($meth->isPrivate()); } + + /** + * @expectedException \DesignPatterns\Creational\Singleton\SingletonPatternViolationException + * @return void + */ + public function testNoCloneAllowed() + { + $obj1 = Singleton::getInstance(); + $obj2 = clone $obj1; + } + + /** + * @expectedException \DesignPatterns\Creational\Singleton\SingletonPatternViolationException + * @return void + */ + public function testNoSerializationAllowed() + { + $obj1 = Singleton::getInstance(); + $serialized = serialize($obj1); + $obj2 = unserialize($serialized); + } } From 400db2fa9c5dc0343db02737b320fca1514b3d1c Mon Sep 17 00:00:00 2001 From: DreamAndDead Date: Wed, 16 Dec 2015 23:45:26 +0800 Subject: [PATCH 108/127] a little fix to the .po file --- locale/zh_CN/LC_MESSAGES/README.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locale/zh_CN/LC_MESSAGES/README.po b/locale/zh_CN/LC_MESSAGES/README.po index 468f5ca..b2d9e60 100644 --- a/locale/zh_CN/LC_MESSAGES/README.po +++ b/locale/zh_CN/LC_MESSAGES/README.po @@ -32,7 +32,7 @@ msgstr "" msgid "" "I think the problem with patterns is that often people do know them but " "don't know when to apply which." -msgstr “” +msgstr "" "我认为人们对于设计模式抱有的问题在于大家都了解它们却不知道该如何在实际中使用它们。" #: ../../README.rst:20 From b024acd0e19a382ef8c861fbd86c3fcf0737c42b Mon Sep 17 00:00:00 2001 From: Hassan Althaf Date: Fri, 18 Dec 2015 14:28:27 +0530 Subject: [PATCH 109/127] Improved grammar in HelloCommand.php Simple grammar fixes. :) --- Behavioral/Command/HelloCommand.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Behavioral/Command/HelloCommand.php b/Behavioral/Command/HelloCommand.php index eb630ed..831c299 100644 --- a/Behavioral/Command/HelloCommand.php +++ b/Behavioral/Command/HelloCommand.php @@ -4,7 +4,7 @@ namespace DesignPatterns\Behavioral\Command; /** * This concrete command calls "print" on the Receiver, but an external - * invoker just know he can call "execute" + * invoker just knows that it can call "execute" */ class HelloCommand implements CommandInterface { @@ -14,8 +14,8 @@ class HelloCommand implements CommandInterface protected $output; /** - * Each concrete command is builded with different receivers. - * Can be one, many, none or even other Command in parameters + * Each concrete command is built with different receivers. + * There can be one, many or completely no receivers, but there can be other commands in the parameters. * * @param Receiver $console */ From 593d9bb1a487821c2fbe15eb419260160bfd407c Mon Sep 17 00:00:00 2001 From: Hassan Althaf Date: Fri, 18 Dec 2015 14:39:31 +0530 Subject: [PATCH 110/127] Removed returns on `addBook` and `removeBook` --- Behavioral/Iterator/BookList.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Behavioral/Iterator/BookList.php b/Behavioral/Iterator/BookList.php index 9c0b9d4..6773f9b 100644 --- a/Behavioral/Iterator/BookList.php +++ b/Behavioral/Iterator/BookList.php @@ -19,8 +19,6 @@ class BookList implements \Countable public function addBook(Book $book) { $this->books[] = $book; - - return $this->count(); } public function removeBook(Book $bookToRemove) @@ -31,8 +29,6 @@ class BookList implements \Countable unset($this->books[$key]); } } - - return $this->count(); } public function count() From fe1f144ec3ce1d09452e67bce12e3a58f0f8657e Mon Sep 17 00:00:00 2001 From: Dominik Liebler Date: Mon, 21 Dec 2015 07:28:20 -0500 Subject: [PATCH 111/127] Applied fixes from StyleCI --- .../ChainOfResponsibilities/Handler.php | 6 +- .../Responsible/FastStorage.php | 2 +- .../Responsible/SlowStorage.php | 3 +- .../Tests/ChainTest.php | 7 +- Behavioral/Command/CommandInterface.php | 2 +- Behavioral/Command/HelloCommand.php | 4 +- Behavioral/Command/Invoker.php | 4 +- Behavioral/Command/Receiver.php | 2 +- Behavioral/Command/Tests/CommandTest.php | 5 +- Behavioral/Iterator/Book.php | 3 +- Behavioral/Iterator/BookList.php | 3 +- Behavioral/Iterator/BookListIterator.php | 25 +++++-- .../Iterator/BookListReverseIterator.php | 25 +++++-- Behavioral/Iterator/Tests/IteratorTest.php | 7 +- Behavioral/Mediator/Colleague.php | 5 +- Behavioral/Mediator/Mediator.php | 10 +-- Behavioral/Mediator/MediatorInterface.php | 8 +- Behavioral/Mediator/Subsystem/Client.php | 6 +- Behavioral/Mediator/Subsystem/Database.php | 4 +- Behavioral/Mediator/Subsystem/Server.php | 4 +- Behavioral/Mediator/Tests/MediatorTest.php | 5 +- Behavioral/Memento/Caretaker.php | 8 +- Behavioral/Memento/Tests/MementoTest.php | 74 +++++++++---------- Behavioral/NullObject/LoggerInterface.php | 2 +- Behavioral/NullObject/PrintLogger.php | 2 +- Behavioral/NullObject/Service.php | 6 +- Behavioral/NullObject/Tests/LoggerTest.php | 5 +- Behavioral/Observer/Tests/ObserverTest.php | 11 ++- Behavioral/Observer/User.php | 17 ++--- Behavioral/Observer/UserObserver.php | 6 +- .../Specification/AbstractSpecification.php | 11 +-- Behavioral/Specification/Either.php | 8 +- Behavioral/Specification/Item.php | 7 +- Behavioral/Specification/Not.php | 8 +- Behavioral/Specification/Plus.php | 8 +- .../Specification/PriceSpecification.php | 9 ++- .../Specification/SpecificationInterface.php | 11 +-- .../Specification/Tests/SpecificationTest.php | 4 +- Behavioral/State/CreateOrder.php | 5 +- Behavioral/State/OrderController.php | 2 +- Behavioral/State/OrderFactory.php | 5 +- Behavioral/State/OrderInterface.php | 2 +- Behavioral/State/ShippingOrder.php | 5 +- Behavioral/Strategy/ComparatorInterface.php | 2 +- Behavioral/Strategy/DateComparator.php | 2 +- Behavioral/Strategy/IdComparator.php | 2 +- Behavioral/Strategy/ObjectCollection.php | 4 +- Behavioral/Strategy/Tests/StrategyTest.php | 11 ++- Behavioral/TemplateMethod/BeachJourney.php | 4 +- Behavioral/TemplateMethod/CityJourney.php | 4 +- Behavioral/TemplateMethod/Journey.php | 6 +- .../TemplateMethod/Tests/JourneyTest.php | 5 +- Behavioral/Visitor/Group.php | 4 +- Behavioral/Visitor/Role.php | 8 +- Behavioral/Visitor/RolePrintVisitor.php | 6 +- Behavioral/Visitor/RoleVisitorInterface.php | 6 +- Behavioral/Visitor/Tests/VisitorTest.php | 7 +- Behavioral/Visitor/User.php | 4 +- .../AbstractFactory/AbstractFactory.php | 6 +- Creational/AbstractFactory/Html/Picture.php | 4 +- Creational/AbstractFactory/Html/Text.php | 6 +- Creational/AbstractFactory/HtmlFactory.php | 6 +- Creational/AbstractFactory/Json/Picture.php | 4 +- Creational/AbstractFactory/Json/Text.php | 4 +- Creational/AbstractFactory/JsonFactory.php | 7 +- Creational/AbstractFactory/MediaInterface.php | 5 +- Creational/AbstractFactory/Picture.php | 3 +- .../Tests/AbstractFactoryTest.php | 6 +- Creational/AbstractFactory/Text.php | 2 +- Creational/Builder/BikeBuilder.php | 2 +- Creational/Builder/CarBuilder.php | 2 +- Creational/Builder/Director.php | 3 +- Creational/Builder/Parts/Bike.php | 2 +- Creational/Builder/Parts/Car.php | 2 +- Creational/Builder/Parts/Door.php | 2 +- Creational/Builder/Parts/Engine.php | 2 +- Creational/Builder/Parts/Vehicle.php | 2 +- Creational/Builder/Parts/Wheel.php | 2 +- Creational/Builder/Tests/DirectorTest.php | 9 +-- Creational/FactoryMethod/Bicycle.php | 4 +- Creational/FactoryMethod/FactoryMethod.php | 9 +-- Creational/FactoryMethod/Ferrari.php | 2 +- Creational/FactoryMethod/GermanFactory.php | 2 +- Creational/FactoryMethod/ItalianFactory.php | 2 +- Creational/FactoryMethod/Porsche.php | 2 +- .../FactoryMethod/Tests/FactoryMethodTest.php | 7 +- Creational/FactoryMethod/VehicleInterface.php | 4 +- Creational/Multiton/Multiton.php | 17 ++--- Creational/Pool/Pool.php | 1 - Creational/Pool/Processor.php | 3 +- Creational/Pool/Worker.php | 1 - Creational/Prototype/BarBookPrototype.php | 4 +- Creational/Prototype/BookPrototype.php | 3 +- Creational/Prototype/FooBookPrototype.php | 4 +- Creational/Prototype/index.php | 4 +- Creational/SimpleFactory/Bicycle.php | 2 +- Creational/SimpleFactory/ConcreteFactory.php | 11 +-- Creational/SimpleFactory/Scooter.php | 2 +- .../SimpleFactory/Tests/SimpleFactoryTest.php | 5 +- Creational/SimpleFactory/VehicleInterface.php | 2 +- Creational/Singleton/Singleton.php | 23 +++--- .../SingletonPatternViolationException.php | 1 - Creational/Singleton/Tests/SingletonTest.php | 5 +- Creational/StaticFactory/FormatNumber.php | 2 +- Creational/StaticFactory/FormatString.php | 2 +- .../StaticFactory/FormatterInterface.php | 2 +- Creational/StaticFactory/StaticFactory.php | 7 +- .../StaticFactory/Tests/StaticFactoryTest.php | 8 +- More/Delegation/JuniorDeveloper.php | 5 +- More/Delegation/TeamLead.php | 10 +-- More/Delegation/Tests/DelegationTest.php | 2 +- More/EAV/Attribute.php | 5 +- More/EAV/Entity.php | 5 +- More/EAV/Tests/AttributeTest.php | 2 +- More/EAV/Tests/EntityTest.php | 10 +-- More/EAV/Tests/ValueTest.php | 2 +- More/EAV/Value.php | 4 +- More/EAV/ValueAccessInterface.php | 2 +- More/EAV/ValueInterface.php | 2 +- More/EAV/example.php | 31 ++++---- More/Repository/MemoryStorage.php | 7 +- More/Repository/Post.php | 3 +- More/Repository/PostRepository.php | 19 ++--- More/Repository/Storage.php | 13 ++-- More/ServiceLocator/ServiceLocator.php | 15 ++-- .../Tests/ServiceLocatorTest.php | 6 +- Structural/Adapter/Book.php | 2 +- Structural/Adapter/EBookAdapter.php | 8 +- Structural/Adapter/EBookInterface.php | 6 +- Structural/Adapter/Kindle.php | 2 +- Structural/Adapter/PaperBookInterface.php | 6 +- Structural/Adapter/Tests/AdapterTest.php | 8 +- Structural/Bridge/Assemble.php | 3 +- Structural/Bridge/Car.php | 5 +- Structural/Bridge/Motorcycle.php | 5 +- Structural/Bridge/Produce.php | 5 +- Structural/Bridge/Tests/BridgeTest.php | 1 - Structural/Bridge/Vehicle.php | 3 +- Structural/Bridge/Workshop.php | 3 +- Structural/Composite/Form.php | 4 +- Structural/Composite/FormElement.php | 4 +- Structural/Composite/InputElement.php | 6 +- Structural/Composite/Tests/CompositeTest.php | 5 +- Structural/Composite/TextElement.php | 6 +- .../DataMapper/Tests/DataMapperTest.php | 8 +- Structural/DataMapper/User.php | 3 +- Structural/DataMapper/UserMapper.php | 19 ++--- Structural/Decorator/Decorator.php | 2 +- Structural/Decorator/RenderInJson.php | 4 +- Structural/Decorator/RenderInXml.php | 4 +- Structural/Decorator/RendererInterface.php | 4 +- Structural/Decorator/Tests/DecoratorTest.php | 11 ++- Structural/Decorator/Webservice.php | 2 +- .../DependencyInjection/AbstractConfig.php | 2 +- .../DependencyInjection/ArrayConfig.php | 12 +-- Structural/DependencyInjection/Connection.php | 5 +- Structural/DependencyInjection/Parameters.php | 6 +- Structural/Facade/BiosInterface.php | 10 +-- Structural/Facade/Facade.php | 7 +- Structural/Facade/OsInterface.php | 4 +- Structural/Facade/Tests/FacadeTest.php | 4 +- Structural/FluentInterface/Sql.php | 18 ++--- .../Tests/FluentInterfaceTest.php | 3 +- Structural/Proxy/Record.php | 8 +- Structural/Proxy/RecordProxy.php | 4 +- Structural/Registry/Registry.php | 8 +- Structural/Registry/Tests/RegistryTest.php | 1 - 167 files changed, 510 insertions(+), 517 deletions(-) diff --git a/Behavioral/ChainOfResponsibilities/Handler.php b/Behavioral/ChainOfResponsibilities/Handler.php index f080e23..679734e 100644 --- a/Behavioral/ChainOfResponsibilities/Handler.php +++ b/Behavioral/ChainOfResponsibilities/Handler.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Behavioral\ChainOfResponsibilities; /** - * Handler is a generic handler in the chain of responsibilities + * Handler is a generic handler in the chain of responsibilities. * * Yes you could have a lighter CoR with a simpler handler but if you want your CoR * to be extendable and decoupled, it's a better idea to do things like that in real @@ -18,7 +18,7 @@ abstract class Handler private $successor = null; /** - * Append a responsibility to the end of chain + * Append a responsibility to the end of chain. * * A prepend method could be done with the same spirit * @@ -68,7 +68,7 @@ abstract class Handler } /** - * Each concrete handler has to implement the processing of the request + * Each concrete handler has to implement the processing of the request. * * @param Request $req * diff --git a/Behavioral/ChainOfResponsibilities/Responsible/FastStorage.php b/Behavioral/ChainOfResponsibilities/Responsible/FastStorage.php index 4a74642..8acaad1 100644 --- a/Behavioral/ChainOfResponsibilities/Responsible/FastStorage.php +++ b/Behavioral/ChainOfResponsibilities/Responsible/FastStorage.php @@ -6,7 +6,7 @@ use DesignPatterns\Behavioral\ChainOfResponsibilities\Handler; use DesignPatterns\Behavioral\ChainOfResponsibilities\Request; /** - * Class FastStorage + * Class FastStorage. */ class FastStorage extends Handler { diff --git a/Behavioral/ChainOfResponsibilities/Responsible/SlowStorage.php b/Behavioral/ChainOfResponsibilities/Responsible/SlowStorage.php index 127b7fc..bd3f825 100644 --- a/Behavioral/ChainOfResponsibilities/Responsible/SlowStorage.php +++ b/Behavioral/ChainOfResponsibilities/Responsible/SlowStorage.php @@ -6,14 +6,13 @@ use DesignPatterns\Behavioral\ChainOfResponsibilities\Handler; use DesignPatterns\Behavioral\ChainOfResponsibilities\Request; /** - * This is mostly the same code as FastStorage but in fact, it may greatly differs + * This is mostly the same code as FastStorage but in fact, it may greatly differs. * * One important fact about CoR: each item in the chain MUST NOT assume its position * in the chain. A CoR is not responsible if the request is not handled UNLESS * you make an "ExceptionHandler" which throws exception if the request goes there. * * To be really extendable, each handler doesn't know if there is something after it. - * */ class SlowStorage extends Handler { diff --git a/Behavioral/ChainOfResponsibilities/Tests/ChainTest.php b/Behavioral/ChainOfResponsibilities/Tests/ChainTest.php index 0e8357c..62d1172 100644 --- a/Behavioral/ChainOfResponsibilities/Tests/ChainTest.php +++ b/Behavioral/ChainOfResponsibilities/Tests/ChainTest.php @@ -3,16 +3,15 @@ namespace DesignPatterns\Behavioral\ChainOfResponsibilities\Tests; use DesignPatterns\Behavioral\ChainOfResponsibilities\Request; +use DesignPatterns\Behavioral\ChainOfResponsibilities\Responsible; use DesignPatterns\Behavioral\ChainOfResponsibilities\Responsible\FastStorage; use DesignPatterns\Behavioral\ChainOfResponsibilities\Responsible\SlowStorage; -use DesignPatterns\Behavioral\ChainOfResponsibilities\Responsible; /** - * ChainTest tests the CoR + * ChainTest tests the CoR. */ class ChainTest extends \PHPUnit_Framework_TestCase { - /** * @var FastStorage */ @@ -30,7 +29,7 @@ class ChainTest extends \PHPUnit_Framework_TestCase $request->verb = 'get'; return array( - array($request) + array($request), ); } diff --git a/Behavioral/Command/CommandInterface.php b/Behavioral/Command/CommandInterface.php index ad9117b..cd9d9c6 100644 --- a/Behavioral/Command/CommandInterface.php +++ b/Behavioral/Command/CommandInterface.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Behavioral\Command; /** - * class CommandInterface + * class CommandInterface. */ interface CommandInterface { diff --git a/Behavioral/Command/HelloCommand.php b/Behavioral/Command/HelloCommand.php index 831c299..94d4723 100644 --- a/Behavioral/Command/HelloCommand.php +++ b/Behavioral/Command/HelloCommand.php @@ -4,7 +4,7 @@ namespace DesignPatterns\Behavioral\Command; /** * This concrete command calls "print" on the Receiver, but an external - * invoker just knows that it can call "execute" + * invoker just knows that it can call "execute". */ class HelloCommand implements CommandInterface { @@ -25,7 +25,7 @@ class HelloCommand implements CommandInterface } /** - * execute and output "Hello World" + * execute and output "Hello World". */ public function execute() { diff --git a/Behavioral/Command/Invoker.php b/Behavioral/Command/Invoker.php index 4461ee2..7942adb 100644 --- a/Behavioral/Command/Invoker.php +++ b/Behavioral/Command/Invoker.php @@ -4,7 +4,7 @@ namespace DesignPatterns\Behavioral\Command; /** * Invoker is using the command given to it. - * Example : an Application in SF2 + * Example : an Application in SF2. */ class Invoker { @@ -25,7 +25,7 @@ class Invoker } /** - * executes the command + * executes the command. */ public function run() { diff --git a/Behavioral/Command/Receiver.php b/Behavioral/Command/Receiver.php index 9289369..ccf910b 100644 --- a/Behavioral/Command/Receiver.php +++ b/Behavioral/Command/Receiver.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Behavioral\Command; /** - * Receiver is specific service with its own contract and can be only concrete + * Receiver is specific service with its own contract and can be only concrete. */ class Receiver { diff --git a/Behavioral/Command/Tests/CommandTest.php b/Behavioral/Command/Tests/CommandTest.php index abf7317..9d9aa51 100644 --- a/Behavioral/Command/Tests/CommandTest.php +++ b/Behavioral/Command/Tests/CommandTest.php @@ -2,16 +2,15 @@ namespace DesignPatterns\Behavioral\Command\Tests; +use DesignPatterns\Behavioral\Command\HelloCommand; use DesignPatterns\Behavioral\Command\Invoker; use DesignPatterns\Behavioral\Command\Receiver; -use DesignPatterns\Behavioral\Command\HelloCommand; /** - * CommandTest has the role of the Client in the Command Pattern + * CommandTest has the role of the Client in the Command Pattern. */ class CommandTest extends \PHPUnit_Framework_TestCase { - /** * @var Invoker */ diff --git a/Behavioral/Iterator/Book.php b/Behavioral/Iterator/Book.php index a0d1114..b1adf7f 100644 --- a/Behavioral/Iterator/Book.php +++ b/Behavioral/Iterator/Book.php @@ -4,7 +4,6 @@ namespace DesignPatterns\Behavioral\Iterator; class Book { - private $author; private $title; @@ -27,6 +26,6 @@ class Book public function getAuthorAndTitle() { - return $this->getTitle() . ' by ' . $this->getAuthor(); + return $this->getTitle().' by '.$this->getAuthor(); } } diff --git a/Behavioral/Iterator/BookList.php b/Behavioral/Iterator/BookList.php index 6773f9b..6cc5e5e 100644 --- a/Behavioral/Iterator/BookList.php +++ b/Behavioral/Iterator/BookList.php @@ -4,7 +4,6 @@ namespace DesignPatterns\Behavioral\Iterator; class BookList implements \Countable { - private $books; public function getBook($bookNumberToGet) @@ -13,7 +12,7 @@ class BookList implements \Countable return $this->books[$bookNumberToGet]; } - return null; + return; } public function addBook(Book $book) diff --git a/Behavioral/Iterator/BookListIterator.php b/Behavioral/Iterator/BookListIterator.php index 93df6d7..ecedba6 100644 --- a/Behavioral/Iterator/BookListIterator.php +++ b/Behavioral/Iterator/BookListIterator.php @@ -4,7 +4,6 @@ namespace DesignPatterns\Behavioral\Iterator; class BookListIterator implements \Iterator { - /** * @var BookList */ @@ -21,8 +20,10 @@ class BookListIterator implements \Iterator } /** - * Return the current book + * Return the current book. + * * @link http://php.net/manual/en/iterator.current.php + * * @return Book Can return any type. */ public function current() @@ -32,8 +33,10 @@ class BookListIterator implements \Iterator /** * (PHP 5 >= 5.0.0)
- * Move forward to next element + * Move forward to next element. + * * @link http://php.net/manual/en/iterator.next.php + * * @return void Any returned value is ignored. */ public function next() @@ -43,8 +46,10 @@ class BookListIterator implements \Iterator /** * (PHP 5 >= 5.0.0)
- * Return the key of the current element + * Return the key of the current element. + * * @link http://php.net/manual/en/iterator.key.php + * * @return mixed scalar on success, or null on failure. */ public function key() @@ -54,10 +59,12 @@ class BookListIterator implements \Iterator /** * (PHP 5 >= 5.0.0)
- * Checks if current position is valid + * Checks if current position is valid. + * * @link http://php.net/manual/en/iterator.valid.php - * @return boolean The return value will be casted to boolean and then evaluated. - * Returns true on success or false on failure. + * + * @return bool The return value will be casted to boolean and then evaluated. + * Returns true on success or false on failure. */ public function valid() { @@ -66,8 +73,10 @@ class BookListIterator implements \Iterator /** * (PHP 5 >= 5.0.0)
- * Rewind the Iterator to the first element + * Rewind the Iterator to the first element. + * * @link http://php.net/manual/en/iterator.rewind.php + * * @return void Any returned value is ignored. */ public function rewind() diff --git a/Behavioral/Iterator/BookListReverseIterator.php b/Behavioral/Iterator/BookListReverseIterator.php index d7ec49a..94f34d9 100644 --- a/Behavioral/Iterator/BookListReverseIterator.php +++ b/Behavioral/Iterator/BookListReverseIterator.php @@ -4,7 +4,6 @@ namespace DesignPatterns\Behavioral\Iterator; class BookListReverseIterator implements \Iterator { - /** * @var BookList */ @@ -22,8 +21,10 @@ class BookListReverseIterator implements \Iterator } /** - * Return the current book + * Return the current book. + * * @link http://php.net/manual/en/iterator.current.php + * * @return Book Can return any type. */ public function current() @@ -33,8 +34,10 @@ class BookListReverseIterator implements \Iterator /** * (PHP 5 >= 5.0.0)
- * Move forward to next element + * Move forward to next element. + * * @link http://php.net/manual/en/iterator.next.php + * * @return void Any returned value is ignored. */ public function next() @@ -44,8 +47,10 @@ class BookListReverseIterator implements \Iterator /** * (PHP 5 >= 5.0.0)
- * Return the key of the current element + * Return the key of the current element. + * * @link http://php.net/manual/en/iterator.key.php + * * @return mixed scalar on success, or null on failure. */ public function key() @@ -55,10 +60,12 @@ class BookListReverseIterator implements \Iterator /** * (PHP 5 >= 5.0.0)
- * Checks if current position is valid + * Checks if current position is valid. + * * @link http://php.net/manual/en/iterator.valid.php - * @return boolean The return value will be casted to boolean and then evaluated. - * Returns true on success or false on failure. + * + * @return bool The return value will be casted to boolean and then evaluated. + * Returns true on success or false on failure. */ public function valid() { @@ -67,8 +74,10 @@ class BookListReverseIterator implements \Iterator /** * (PHP 5 >= 5.0.0)
- * Rewind the Iterator to the first element + * Rewind the Iterator to the first element. + * * @link http://php.net/manual/en/iterator.rewind.php + * * @return void Any returned value is ignored. */ public function rewind() diff --git a/Behavioral/Iterator/Tests/IteratorTest.php b/Behavioral/Iterator/Tests/IteratorTest.php index 2c5acd9..db386f0 100644 --- a/Behavioral/Iterator/Tests/IteratorTest.php +++ b/Behavioral/Iterator/Tests/IteratorTest.php @@ -9,7 +9,6 @@ use DesignPatterns\Behavioral\Iterator\BookListReverseIterator; class IteratorTest extends \PHPUnit_Framework_TestCase { - /** * @var BookList */ @@ -30,8 +29,8 @@ class IteratorTest extends \PHPUnit_Framework_TestCase array( 'Learning PHP Design Patterns by William Sanders', 'Professional Php Design Patterns by Aaron Saray', - 'Clean Code by Robert C. Martin' - ) + 'Clean Code by Robert C. Martin', + ), ), ); } @@ -65,7 +64,7 @@ class IteratorTest extends \PHPUnit_Framework_TestCase } /** - * Test BookList Remove + * Test BookList Remove. */ public function testBookRemove() { diff --git a/Behavioral/Mediator/Colleague.php b/Behavioral/Mediator/Colleague.php index c0ff248..c74dee5 100644 --- a/Behavioral/Mediator/Colleague.php +++ b/Behavioral/Mediator/Colleague.php @@ -9,12 +9,12 @@ namespace DesignPatterns\Behavioral\Mediator; abstract class Colleague { /** - * this ensures no change in subclasses + * this ensures no change in subclasses. * * @var MediatorInterface */ private $mediator; - + /** * @param MediatorInterface $medium */ @@ -25,6 +25,7 @@ abstract class Colleague } // for subclasses + protected function getMediator() { return $this->mediator; diff --git a/Behavioral/Mediator/Mediator.php b/Behavioral/Mediator/Mediator.php index ba1407e..98a7890 100644 --- a/Behavioral/Mediator/Mediator.php +++ b/Behavioral/Mediator/Mediator.php @@ -2,15 +2,12 @@ namespace DesignPatterns\Behavioral\Mediator; -use DesignPatterns\Behavioral\Mediator\Subsystem; - /** * Mediator is the concrete Mediator for this design pattern. * In this example, I have made a "Hello World" with the Mediator Pattern. */ class Mediator implements MediatorInterface { - /** * @var Subsystem\Server */ @@ -39,7 +36,7 @@ class Mediator implements MediatorInterface } /** - * make request + * make request. */ public function makeRequest() { @@ -47,7 +44,8 @@ class Mediator implements MediatorInterface } /** - * query db + * query db. + * * @return mixed */ public function queryDb() @@ -56,7 +54,7 @@ class Mediator implements MediatorInterface } /** - * send response + * send response. * * @param string $content */ diff --git a/Behavioral/Mediator/MediatorInterface.php b/Behavioral/Mediator/MediatorInterface.php index b289cea..dbdd489 100644 --- a/Behavioral/Mediator/MediatorInterface.php +++ b/Behavioral/Mediator/MediatorInterface.php @@ -4,24 +4,24 @@ namespace DesignPatterns\Behavioral\Mediator; /** * MediatorInterface is a contract for the Mediator - * This interface is not mandatory but it is better for LSP concerns + * This interface is not mandatory but it is better for LSP concerns. */ interface MediatorInterface { /** - * sends the response + * sends the response. * * @param string $content */ public function sendResponse($content); /** - * makes a request + * makes a request. */ public function makeRequest(); /** - * queries the DB + * queries the DB. */ public function queryDb(); } diff --git a/Behavioral/Mediator/Subsystem/Client.php b/Behavioral/Mediator/Subsystem/Client.php index cb4b020..f7a21c9 100644 --- a/Behavioral/Mediator/Subsystem/Client.php +++ b/Behavioral/Mediator/Subsystem/Client.php @@ -5,12 +5,12 @@ namespace DesignPatterns\Behavioral\Mediator\Subsystem; use DesignPatterns\Behavioral\Mediator\Colleague; /** - * Client is a client that make request et get response + * Client is a client that make request et get response. */ class Client extends Colleague { /** - * request + * request. */ public function request() { @@ -18,7 +18,7 @@ class Client extends Colleague } /** - * output content + * output content. * * @param string $content */ diff --git a/Behavioral/Mediator/Subsystem/Database.php b/Behavioral/Mediator/Subsystem/Database.php index 7cc9bc4..69ad6cf 100644 --- a/Behavioral/Mediator/Subsystem/Database.php +++ b/Behavioral/Mediator/Subsystem/Database.php @@ -5,7 +5,7 @@ namespace DesignPatterns\Behavioral\Mediator\Subsystem; use DesignPatterns\Behavioral\Mediator\Colleague; /** - * Database is a database service + * Database is a database service. */ class Database extends Colleague { @@ -14,6 +14,6 @@ class Database extends Colleague */ public function getData() { - return "World"; + return 'World'; } } diff --git a/Behavioral/Mediator/Subsystem/Server.php b/Behavioral/Mediator/Subsystem/Server.php index 1638301..1602bcb 100644 --- a/Behavioral/Mediator/Subsystem/Server.php +++ b/Behavioral/Mediator/Subsystem/Server.php @@ -5,12 +5,12 @@ namespace DesignPatterns\Behavioral\Mediator\Subsystem; use DesignPatterns\Behavioral\Mediator\Colleague; /** - * Server serves responses + * Server serves responses. */ class Server extends Colleague { /** - * process on server + * process on server. */ public function process() { diff --git a/Behavioral/Mediator/Tests/MediatorTest.php b/Behavioral/Mediator/Tests/MediatorTest.php index 13abe48..2bce947 100644 --- a/Behavioral/Mediator/Tests/MediatorTest.php +++ b/Behavioral/Mediator/Tests/MediatorTest.php @@ -3,16 +3,15 @@ namespace DesignPatterns\Tests\Mediator\Tests; use DesignPatterns\Behavioral\Mediator\Mediator; -use DesignPatterns\Behavioral\Mediator\Subsystem\Database; use DesignPatterns\Behavioral\Mediator\Subsystem\Client; +use DesignPatterns\Behavioral\Mediator\Subsystem\Database; use DesignPatterns\Behavioral\Mediator\Subsystem\Server; /** - * MediatorTest tests hello world + * MediatorTest tests hello world. */ class MediatorTest extends \PHPUnit_Framework_TestCase { - protected $client; protected function setUp() diff --git a/Behavioral/Memento/Caretaker.php b/Behavioral/Memento/Caretaker.php index 72530fb..d80454a 100644 --- a/Behavioral/Memento/Caretaker.php +++ b/Behavioral/Memento/Caretaker.php @@ -27,19 +27,19 @@ class Caretaker $originator = new Originator(); //Setting state to State1 - $originator->setState("State1"); + $originator->setState('State1'); //Setting state to State2 - $originator->setState("State2"); + $originator->setState('State2'); //Saving State2 to Memento $this->saveToHistory($originator->getStateAsMemento()); //Setting state to State3 - $originator->setState("State3"); + $originator->setState('State3'); // We can request multiple mementos, and choose which one to roll back to. // Saving State3 to Memento $this->saveToHistory($originator->getStateAsMemento()); //Setting state to State4 - $originator->setState("State4"); + $originator->setState('State4'); $originator->restoreFromMemento($this->getFromHistory(1)); //State after restoring from Memento: State3 diff --git a/Behavioral/Memento/Tests/MementoTest.php b/Behavioral/Memento/Tests/MementoTest.php index 3ea82b1..722dbfa 100644 --- a/Behavioral/Memento/Tests/MementoTest.php +++ b/Behavioral/Memento/Tests/MementoTest.php @@ -7,11 +7,10 @@ use DesignPatterns\Behavioral\Memento\Memento; use DesignPatterns\Behavioral\Memento\Originator; /** - * MementoTest tests the memento pattern + * MementoTest tests the memento pattern. */ class MementoTest extends \PHPUnit_Framework_TestCase { - public function testUsageExample() { $originator = new Originator(); @@ -19,25 +18,25 @@ class MementoTest extends \PHPUnit_Framework_TestCase $character = new \stdClass(); // new object - $character->name = "Gandalf"; + $character->name = 'Gandalf'; // connect Originator to character object $originator->setState($character); // work on the object - $character->name = "Gandalf the Grey"; + $character->name = 'Gandalf the Grey'; // still change something - $character->race = "Maia"; + $character->race = 'Maia'; // time to save state $snapshot = $originator->getStateAsMemento(); // put state to log $caretaker->saveToHistory($snapshot); // change something - $character->name = "Sauron"; + $character->name = 'Sauron'; // and again - $character->race = "Ainur"; + $character->race = 'Ainur'; // state inside the Originator was equally changed - $this->assertAttributeEquals($character, "state", $originator); + $this->assertAttributeEquals($character, 'state', $originator); // time to save another state $snapshot = $originator->getStateAsMemento(); @@ -51,32 +50,32 @@ class MementoTest extends \PHPUnit_Framework_TestCase $character = $rollback->getState(); // yes, that what we need - $this->assertEquals("Gandalf the Grey", $character->name); + $this->assertEquals('Gandalf the Grey', $character->name); // make new changes - $character->name = "Gandalf the White"; + $character->name = 'Gandalf the White'; // and Originator linked to actual object again - $this->assertAttributeEquals($character, "state", $originator); + $this->assertAttributeEquals($character, 'state', $originator); } public function testStringState() { $originator = new Originator(); - $originator->setState("State1"); + $originator->setState('State1'); - $this->assertAttributeEquals("State1", "state", $originator); + $this->assertAttributeEquals('State1', 'state', $originator); - $originator->setState("State2"); - $this->assertAttributeEquals("State2", "state", $originator); + $originator->setState('State2'); + $this->assertAttributeEquals('State2', 'state', $originator); $snapshot = $originator->getStateAsMemento(); - $this->assertAttributeEquals("State2", "state", $snapshot); + $this->assertAttributeEquals('State2', 'state', $snapshot); - $originator->setState("State3"); - $this->assertAttributeEquals("State3", "state", $originator); + $originator->setState('State3'); + $this->assertAttributeEquals('State3', 'state', $originator); $originator->restoreFromMemento($snapshot); - $this->assertAttributeEquals("State2", "state", $originator); + $this->assertAttributeEquals('State2', 'state', $originator); } public function testSnapshotIsClone() @@ -88,11 +87,11 @@ class MementoTest extends \PHPUnit_Framework_TestCase $snapshot = $originator->getStateAsMemento(); $object->new_property = 1; - $this->assertAttributeEquals($object, "state", $originator); - $this->assertAttributeNotEquals($object, "state", $snapshot); + $this->assertAttributeEquals($object, 'state', $originator); + $this->assertAttributeNotEquals($object, 'state', $snapshot); $originator->restoreFromMemento($snapshot); - $this->assertAttributeNotEquals($object, "state", $originator); + $this->assertAttributeNotEquals($object, 'state', $originator); } public function testCanChangeActualState() @@ -108,16 +107,16 @@ class MementoTest extends \PHPUnit_Framework_TestCase $first_state->first_property = 1; // just history $second_state->second_property = 2; - $this->assertAttributeEquals($first_state, "state", $originator); - $this->assertAttributeNotEquals($second_state, "state", $originator); + $this->assertAttributeEquals($first_state, 'state', $originator); + $this->assertAttributeNotEquals($second_state, 'state', $originator); $originator->restoreFromMemento($snapshot); // now it lost state $first_state->first_property = 11; // must be actual $second_state->second_property = 22; - $this->assertAttributeEquals($second_state, "state", $originator); - $this->assertAttributeNotEquals($first_state, "state", $originator); + $this->assertAttributeEquals($second_state, 'state', $originator); + $this->assertAttributeNotEquals($first_state, 'state', $originator); } public function testStateWithDifferentObjects() @@ -125,40 +124,39 @@ class MementoTest extends \PHPUnit_Framework_TestCase $originator = new Originator(); $first = new \stdClass(); - $first->data = "foo"; + $first->data = 'foo'; $originator->setState($first); - $this->assertAttributeEquals($first, "state", $originator); + $this->assertAttributeEquals($first, 'state', $originator); $first_snapshot = $originator->getStateAsMemento(); - $this->assertAttributeEquals($first, "state", $first_snapshot); + $this->assertAttributeEquals($first, 'state', $first_snapshot); - $second = new \stdClass(); - $second->data = "bar"; + $second = new \stdClass(); + $second->data = 'bar'; $originator->setState($second); - $this->assertAttributeEquals($second, "state", $originator); + $this->assertAttributeEquals($second, 'state', $originator); $originator->restoreFromMemento($first_snapshot); - $this->assertAttributeEquals($first, "state", $originator); + $this->assertAttributeEquals($first, 'state', $originator); } public function testCaretaker() { $caretaker = new Caretaker(); - $memento1 = new Memento("foo"); - $memento2 = new Memento("bar"); + $memento1 = new Memento('foo'); + $memento2 = new Memento('bar'); $caretaker->saveToHistory($memento1); $caretaker->saveToHistory($memento2); - $this->assertAttributeEquals(array($memento1, $memento2), "history", $caretaker); + $this->assertAttributeEquals(array($memento1, $memento2), 'history', $caretaker); $this->assertEquals($memento1, $caretaker->getFromHistory(0)); $this->assertEquals($memento2, $caretaker->getFromHistory(1)); - } public function testCaretakerCustomLogic() { $caretaker = new Caretaker(); $result = $caretaker->runCustomLogic(); - $this->assertEquals("State3", $result); + $this->assertEquals('State3', $result); } } diff --git a/Behavioral/NullObject/LoggerInterface.php b/Behavioral/NullObject/LoggerInterface.php index 216d838..99a28c7 100644 --- a/Behavioral/NullObject/LoggerInterface.php +++ b/Behavioral/NullObject/LoggerInterface.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Behavioral\NullObject; /** - * LoggerInterface is a contract for logging something + * LoggerInterface is a contract for logging something. * * Key feature: NullLogger MUST inherit from this interface like any other Loggers */ diff --git a/Behavioral/NullObject/PrintLogger.php b/Behavioral/NullObject/PrintLogger.php index a088145..371c1ab 100644 --- a/Behavioral/NullObject/PrintLogger.php +++ b/Behavioral/NullObject/PrintLogger.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Behavioral\NullObject; /** - * PrintLogger is a logger that prints the log entry to standard output + * PrintLogger is a logger that prints the log entry to standard output. */ class PrintLogger implements LoggerInterface { diff --git a/Behavioral/NullObject/Service.php b/Behavioral/NullObject/Service.php index ae6d96d..56a3847 100644 --- a/Behavioral/NullObject/Service.php +++ b/Behavioral/NullObject/Service.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Behavioral\NullObject; /** - * Service is dummy service that uses a logger + * Service is dummy service that uses a logger. */ class Service { @@ -13,7 +13,7 @@ class Service protected $logger; /** - * we inject the logger in ctor and it is mandatory + * we inject the logger in ctor and it is mandatory. * * @param LoggerInterface $log */ @@ -28,7 +28,7 @@ class Service public function doSomething() { // no more check "if (!is_null($this->logger))..." with the NullObject pattern - $this->logger->log('We are in ' . __METHOD__); + $this->logger->log('We are in '.__METHOD__); // something to do... } } diff --git a/Behavioral/NullObject/Tests/LoggerTest.php b/Behavioral/NullObject/Tests/LoggerTest.php index a8e7bf5..034b577 100644 --- a/Behavioral/NullObject/Tests/LoggerTest.php +++ b/Behavioral/NullObject/Tests/LoggerTest.php @@ -3,15 +3,14 @@ namespace DesignPatterns\Behavioral\NullObject\Tests; use DesignPatterns\Behavioral\NullObject\NullLogger; -use DesignPatterns\Behavioral\NullObject\Service; use DesignPatterns\Behavioral\NullObject\PrintLogger; +use DesignPatterns\Behavioral\NullObject\Service; /** - * LoggerTest tests for different loggers + * LoggerTest tests for different loggers. */ class LoggerTest extends \PHPUnit_Framework_TestCase { - public function testNullObject() { // one can use a singleton for NullObjet : I don't think it's a good idea diff --git a/Behavioral/Observer/Tests/ObserverTest.php b/Behavioral/Observer/Tests/ObserverTest.php index 75490cc..d9dacec 100644 --- a/Behavioral/Observer/Tests/ObserverTest.php +++ b/Behavioral/Observer/Tests/ObserverTest.php @@ -2,15 +2,14 @@ namespace DesignPatterns\Behavioral\Observer\Tests; -use DesignPatterns\Behavioral\Observer\UserObserver; use DesignPatterns\Behavioral\Observer\User; +use DesignPatterns\Behavioral\Observer\UserObserver; /** - * ObserverTest tests the Observer pattern + * ObserverTest tests the Observer pattern. */ class ObserverTest extends \PHPUnit_Framework_TestCase { - protected $observer; protected function setUp() @@ -19,7 +18,7 @@ class ObserverTest extends \PHPUnit_Framework_TestCase } /** - * Tests the notification + * Tests the notification. */ public function testNotify() { @@ -31,7 +30,7 @@ class ObserverTest extends \PHPUnit_Framework_TestCase } /** - * Tests the subscribing + * Tests the subscribing. */ public function testAttachDetach() { @@ -53,7 +52,7 @@ class ObserverTest extends \PHPUnit_Framework_TestCase } /** - * Tests the update() invocation on a mockup + * Tests the update() invocation on a mockup. */ public function testUpdateCalling() { diff --git a/Behavioral/Observer/User.php b/Behavioral/Observer/User.php index 213f229..0d2a817 100644 --- a/Behavioral/Observer/User.php +++ b/Behavioral/Observer/User.php @@ -3,34 +3,33 @@ namespace DesignPatterns\Behavioral\Observer; /** - * Observer pattern : The observed object (the subject) + * Observer pattern : The observed object (the subject). * * The subject maintains a list of Observers and sends notifications. - * */ class User implements \SplSubject { /** - * user data + * user data. * * @var array */ protected $data = array(); /** - * observers + * observers. * * @var \SplObjectStorage */ protected $observers; - + public function __construct() { $this->observers = new \SplObjectStorage(); } /** - * attach a new observer + * attach a new observer. * * @param \SplObserver $observer * @@ -42,7 +41,7 @@ class User implements \SplSubject } /** - * detach an observer + * detach an observer. * * @param \SplObserver $observer * @@ -54,7 +53,7 @@ class User implements \SplSubject } /** - * notify observers + * notify observers. * * @return void */ @@ -68,7 +67,7 @@ class User implements \SplSubject /** * Ideally one would better write setter/getter for all valid attributes and only call notify() - * on attributes that matter when changed + * on attributes that matter when changed. * * @param string $name * @param mixed $value diff --git a/Behavioral/Observer/UserObserver.php b/Behavioral/Observer/UserObserver.php index f444604..f2673ba 100644 --- a/Behavioral/Observer/UserObserver.php +++ b/Behavioral/Observer/UserObserver.php @@ -3,18 +3,18 @@ namespace DesignPatterns\Behavioral\Observer; /** - * class UserObserver + * class UserObserver. */ class UserObserver implements \SplObserver { /** * This is the only method to implement as an observer. - * It is called by the Subject (usually by SplSubject::notify() ) + * It is called by the Subject (usually by SplSubject::notify() ). * * @param \SplSubject $subject */ public function update(\SplSubject $subject) { - echo get_class($subject) . ' has been updated'; + echo get_class($subject).' has been updated'; } } diff --git a/Behavioral/Specification/AbstractSpecification.php b/Behavioral/Specification/AbstractSpecification.php index f297539..66d61b8 100644 --- a/Behavioral/Specification/AbstractSpecification.php +++ b/Behavioral/Specification/AbstractSpecification.php @@ -1,13 +1,14 @@ comparator) { - throw new \LogicException("Comparator is not set"); + throw new \LogicException('Comparator is not set'); } $callback = array($this->comparator, 'compare'); diff --git a/Behavioral/Strategy/Tests/StrategyTest.php b/Behavioral/Strategy/Tests/StrategyTest.php index 4831b18..1911ba4 100644 --- a/Behavioral/Strategy/Tests/StrategyTest.php +++ b/Behavioral/Strategy/Tests/StrategyTest.php @@ -8,21 +8,20 @@ use DesignPatterns\Behavioral\Strategy\ObjectCollection; use DesignPatterns\Behavioral\Strategy\Strategy; /** - * Tests for Strategy pattern + * Tests for Strategy pattern. */ class StrategyTest extends \PHPUnit_Framework_TestCase { - public function getIdCollection() { return array( array( array(array('id' => 2), array('id' => 1), array('id' => 3)), - array('id' => 1) + array('id' => 1), ), array( array(array('id' => 3), array('id' => 2), array('id' => 1)), - array('id' => 1) + array('id' => 1), ), ); } @@ -32,11 +31,11 @@ class StrategyTest extends \PHPUnit_Framework_TestCase return array( array( array(array('date' => '2014-03-03'), array('date' => '2015-03-02'), array('date' => '2013-03-01')), - array('date' => '2013-03-01') + array('date' => '2013-03-01'), ), array( array(array('date' => '2014-02-03'), array('date' => '2013-02-01'), array('date' => '2015-02-02')), - array('date' => '2013-02-01') + array('date' => '2013-02-01'), ), ); } diff --git a/Behavioral/TemplateMethod/BeachJourney.php b/Behavioral/TemplateMethod/BeachJourney.php index 94018f3..d19845c 100644 --- a/Behavioral/TemplateMethod/BeachJourney.php +++ b/Behavioral/TemplateMethod/BeachJourney.php @@ -3,12 +3,12 @@ namespace DesignPatterns\Behavioral\TemplateMethod; /** - * BeachJourney is vacation at the beach + * BeachJourney is vacation at the beach. */ class BeachJourney extends Journey { /** - * prints what to do to enjoy your vacation + * prints what to do to enjoy your vacation. */ protected function enjoyVacation() { diff --git a/Behavioral/TemplateMethod/CityJourney.php b/Behavioral/TemplateMethod/CityJourney.php index 89c2ef0..3f36b61 100644 --- a/Behavioral/TemplateMethod/CityJourney.php +++ b/Behavioral/TemplateMethod/CityJourney.php @@ -3,12 +3,12 @@ namespace DesignPatterns\Behavioral\TemplateMethod; /** - * CityJourney is a journey in a city + * CityJourney is a journey in a city. */ class CityJourney extends Journey { /** - * prints what to do in your journey to enjoy vacation + * prints what to do in your journey to enjoy vacation. */ protected function enjoyVacation() { diff --git a/Behavioral/TemplateMethod/Journey.php b/Behavioral/TemplateMethod/Journey.php index cec9a7d..6309e7f 100644 --- a/Behavioral/TemplateMethod/Journey.php +++ b/Behavioral/TemplateMethod/Journey.php @@ -23,7 +23,7 @@ abstract class Journey } /** - * This method must be implemented, this is the key-feature of this pattern + * This method must be implemented, this is the key-feature of this pattern. */ abstract protected function enjoyVacation(); @@ -37,7 +37,7 @@ abstract class Journey } /** - * This method will be unknown by subclasses (better) + * This method will be unknown by subclasses (better). */ private function buyAFlight() { @@ -46,7 +46,7 @@ abstract class Journey /** * Subclasses will get access to this method but cannot override it and - * compromise this algorithm (warning : cause of cyclic dependencies) + * compromise this algorithm (warning : cause of cyclic dependencies). */ final protected function takePlane() { diff --git a/Behavioral/TemplateMethod/Tests/JourneyTest.php b/Behavioral/TemplateMethod/Tests/JourneyTest.php index d0b134c..82acef3 100644 --- a/Behavioral/TemplateMethod/Tests/JourneyTest.php +++ b/Behavioral/TemplateMethod/Tests/JourneyTest.php @@ -5,11 +5,10 @@ namespace DesignPatterns\Behavioral\TemplateMethod\Tests; use DesignPatterns\Behavioral\TemplateMethod; /** - * JourneyTest tests all journeys + * JourneyTest tests all journeys. */ class JourneyTest extends \PHPUnit_Framework_TestCase { - public function testBeach() { $journey = new TemplateMethod\BeachJourney(); @@ -25,7 +24,7 @@ class JourneyTest extends \PHPUnit_Framework_TestCase } /** - * How to test an abstract template method with PHPUnit + * How to test an abstract template method with PHPUnit. */ public function testLasVegas() { diff --git a/Behavioral/Visitor/Group.php b/Behavioral/Visitor/Group.php index 3990f9c..b2c9d90 100644 --- a/Behavioral/Visitor/Group.php +++ b/Behavioral/Visitor/Group.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Behavioral\Visitor; /** - * An example of a Visitor: Group + * An example of a Visitor: Group. */ class Group extends Role { @@ -25,6 +25,6 @@ class Group extends Role */ public function getName() { - return "Group: " . $this->name; + return 'Group: '.$this->name; } } diff --git a/Behavioral/Visitor/Role.php b/Behavioral/Visitor/Role.php index fd0d0a4..011a0fb 100644 --- a/Behavioral/Visitor/Role.php +++ b/Behavioral/Visitor/Role.php @@ -3,12 +3,12 @@ namespace DesignPatterns\Behavioral\Visitor; /** - * class Role + * class Role. */ abstract class Role { /** - * This method handles a double dispatch based on the short name of the Visitor + * This method handles a double dispatch based on the short name of the Visitor. * * Feel free to override it if your object must call another visiting behavior * @@ -21,10 +21,10 @@ abstract class Role // this trick to simulate double-dispatch based on type-hinting $klass = get_called_class(); preg_match('#([^\\\\]+)$#', $klass, $extract); - $visitingMethod = 'visit' . $extract[1]; + $visitingMethod = 'visit'.$extract[1]; // this ensures strong typing with visitor interface, not some visitor objects - if (!method_exists(__NAMESPACE__ . '\RoleVisitorInterface', $visitingMethod)) { + if (!method_exists(__NAMESPACE__.'\RoleVisitorInterface', $visitingMethod)) { throw new \InvalidArgumentException("The visitor you provide cannot visit a $klass instance"); } diff --git a/Behavioral/Visitor/RolePrintVisitor.php b/Behavioral/Visitor/RolePrintVisitor.php index 5f07d5c..49777cf 100644 --- a/Behavioral/Visitor/RolePrintVisitor.php +++ b/Behavioral/Visitor/RolePrintVisitor.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Behavioral\Visitor; /** - * Visitor Pattern + * Visitor Pattern. * * An implementation of a concrete Visitor */ @@ -14,7 +14,7 @@ class RolePrintVisitor implements RoleVisitorInterface */ public function visitGroup(Group $role) { - echo "Role: " . $role->getName(); + echo 'Role: '.$role->getName(); } /** @@ -22,6 +22,6 @@ class RolePrintVisitor implements RoleVisitorInterface */ public function visitUser(User $role) { - echo "Role: " . $role->getName(); + echo 'Role: '.$role->getName(); } } diff --git a/Behavioral/Visitor/RoleVisitorInterface.php b/Behavioral/Visitor/RoleVisitorInterface.php index b007b13..1a72d7e 100644 --- a/Behavioral/Visitor/RoleVisitorInterface.php +++ b/Behavioral/Visitor/RoleVisitorInterface.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Behavioral\Visitor; /** - * Visitor Pattern + * Visitor Pattern. * * The contract for the visitor. * @@ -16,14 +16,14 @@ namespace DesignPatterns\Behavioral\Visitor; interface RoleVisitorInterface { /** - * Visit a User object + * Visit a User object. * * @param \DesignPatterns\Behavioral\Visitor\User $role */ public function visitUser(User $role); /** - * Visit a Group object + * Visit a Group object. * * @param \DesignPatterns\Behavioral\Visitor\Group $role */ diff --git a/Behavioral/Visitor/Tests/VisitorTest.php b/Behavioral/Visitor/Tests/VisitorTest.php index 6d71658..f3b5bc7 100644 --- a/Behavioral/Visitor/Tests/VisitorTest.php +++ b/Behavioral/Visitor/Tests/VisitorTest.php @@ -5,11 +5,10 @@ namespace DesignPatterns\Tests\Visitor\Tests; use DesignPatterns\Behavioral\Visitor; /** - * VisitorTest tests the visitor pattern + * VisitorTest tests the visitor pattern. */ class VisitorTest extends \PHPUnit_Framework_TestCase { - protected $visitor; protected function setUp() @@ -20,8 +19,8 @@ class VisitorTest extends \PHPUnit_Framework_TestCase public function getRole() { return array( - array(new Visitor\User("Dominik"), 'Role: User Dominik'), - array(new Visitor\Group("Administrators"), 'Role: Group: Administrators') + array(new Visitor\User('Dominik'), 'Role: User Dominik'), + array(new Visitor\Group('Administrators'), 'Role: Group: Administrators'), ); } diff --git a/Behavioral/Visitor/User.php b/Behavioral/Visitor/User.php index e0cc4c7..5a95fbe 100644 --- a/Behavioral/Visitor/User.php +++ b/Behavioral/Visitor/User.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Behavioral\Visitor; /** - * Visitor Pattern + * Visitor Pattern. * * One example for a visitee. Each visitee has to extends Role */ @@ -27,6 +27,6 @@ class User extends Role */ public function getName() { - return "User " . $this->name; + return 'User '.$this->name; } } diff --git a/Creational/AbstractFactory/AbstractFactory.php b/Creational/AbstractFactory/AbstractFactory.php index 49982e5..6529ff6 100644 --- a/Creational/AbstractFactory/AbstractFactory.php +++ b/Creational/AbstractFactory/AbstractFactory.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Creational\AbstractFactory; /** - * class AbstractFactory + * class AbstractFactory. * * Sometimes also known as "Kit" in a GUI libraries. * @@ -20,7 +20,7 @@ namespace DesignPatterns\Creational\AbstractFactory; abstract class AbstractFactory { /** - * Creates a text component + * Creates a text component. * * @param string $content * @@ -29,7 +29,7 @@ abstract class AbstractFactory abstract public function createText($content); /** - * Creates a picture component + * Creates a picture component. * * @param string $path * @param string $name diff --git a/Creational/AbstractFactory/Html/Picture.php b/Creational/AbstractFactory/Html/Picture.php index 9d7f440..3abacb4 100644 --- a/Creational/AbstractFactory/Html/Picture.php +++ b/Creational/AbstractFactory/Html/Picture.php @@ -5,14 +5,14 @@ namespace DesignPatterns\Creational\AbstractFactory\Html; use DesignPatterns\Creational\AbstractFactory\Picture as BasePicture; /** - * Class Picture + * Class Picture. * * Picture is a concrete image for HTML rendering */ class Picture extends BasePicture { /** - * some crude rendering from HTML output + * some crude rendering from HTML output. * * @return string */ diff --git a/Creational/AbstractFactory/Html/Text.php b/Creational/AbstractFactory/Html/Text.php index 120c043..8c33da6 100644 --- a/Creational/AbstractFactory/Html/Text.php +++ b/Creational/AbstractFactory/Html/Text.php @@ -5,19 +5,19 @@ namespace DesignPatterns\Creational\AbstractFactory\Html; use DesignPatterns\Creational\AbstractFactory\Text as BaseText; /** - * Class Text + * Class Text. * * Text is a concrete text for HTML rendering */ class Text extends BaseText { /** - * some crude rendering from HTML output + * some crude rendering from HTML output. * * @return string */ public function render() { - return '

'; + return '
'.htmlspecialchars($this->text).'
'; } } diff --git a/Creational/AbstractFactory/HtmlFactory.php b/Creational/AbstractFactory/HtmlFactory.php index 7982a24..5c22859 100644 --- a/Creational/AbstractFactory/HtmlFactory.php +++ b/Creational/AbstractFactory/HtmlFactory.php @@ -3,14 +3,14 @@ namespace DesignPatterns\Creational\AbstractFactory; /** - * Class HtmlFactory + * Class HtmlFactory. * * HtmlFactory is a concrete factory for HTML component */ class HtmlFactory extends AbstractFactory { /** - * Creates a picture component + * Creates a picture component. * * @param string $path * @param string $name @@ -23,7 +23,7 @@ class HtmlFactory extends AbstractFactory } /** - * Creates a text component + * Creates a text component. * * @param string $content * diff --git a/Creational/AbstractFactory/Json/Picture.php b/Creational/AbstractFactory/Json/Picture.php index 13d191b..77bb150 100644 --- a/Creational/AbstractFactory/Json/Picture.php +++ b/Creational/AbstractFactory/Json/Picture.php @@ -5,14 +5,14 @@ namespace DesignPatterns\Creational\AbstractFactory\Json; use DesignPatterns\Creational\AbstractFactory\Picture as BasePicture; /** - * Class Picture + * Class Picture. * * Picture is a concrete image for JSON rendering */ class Picture extends BasePicture { /** - * some crude rendering from JSON output + * some crude rendering from JSON output. * * @return string */ diff --git a/Creational/AbstractFactory/Json/Text.php b/Creational/AbstractFactory/Json/Text.php index 699fff3..4c51785 100644 --- a/Creational/AbstractFactory/Json/Text.php +++ b/Creational/AbstractFactory/Json/Text.php @@ -5,14 +5,14 @@ namespace DesignPatterns\Creational\AbstractFactory\Json; use DesignPatterns\Creational\AbstractFactory\Text as BaseText; /** - * Class Text + * Class Text. * * Text is a text component with a JSON rendering */ class Text extends BaseText { /** - * some crude rendering from JSON output + * some crude rendering from JSON output. * * @return string */ diff --git a/Creational/AbstractFactory/JsonFactory.php b/Creational/AbstractFactory/JsonFactory.php index ab2bb6f..63a9979 100644 --- a/Creational/AbstractFactory/JsonFactory.php +++ b/Creational/AbstractFactory/JsonFactory.php @@ -3,16 +3,15 @@ namespace DesignPatterns\Creational\AbstractFactory; /** - * Class JsonFactory + * Class JsonFactory. * * JsonFactory is a factory for creating a family of JSON component * (example for ajax) */ class JsonFactory extends AbstractFactory { - /** - * Creates a picture component + * Creates a picture component. * * @param string $path * @param string $name @@ -25,7 +24,7 @@ class JsonFactory extends AbstractFactory } /** - * Creates a text component + * Creates a text component. * * @param string $content * diff --git a/Creational/AbstractFactory/MediaInterface.php b/Creational/AbstractFactory/MediaInterface.php index 6bb5d3a..aa73f1b 100644 --- a/Creational/AbstractFactory/MediaInterface.php +++ b/Creational/AbstractFactory/MediaInterface.php @@ -3,16 +3,15 @@ namespace DesignPatterns\Creational\AbstractFactory; /** - * Interface MediaInterface + * Interface MediaInterface. * * This contract is not part of the pattern, in general case, each component * are not related */ interface MediaInterface { - /** - * some crude rendering from JSON or html output (depended on concrete class) + * some crude rendering from JSON or html output (depended on concrete class). * * @return string */ diff --git a/Creational/AbstractFactory/Picture.php b/Creational/AbstractFactory/Picture.php index 8a4f720..89fd66f 100644 --- a/Creational/AbstractFactory/Picture.php +++ b/Creational/AbstractFactory/Picture.php @@ -3,11 +3,10 @@ namespace DesignPatterns\Creational\AbstractFactory; /** - * Class Picture + * Class Picture. */ abstract class Picture implements MediaInterface { - /** * @var string */ diff --git a/Creational/AbstractFactory/Tests/AbstractFactoryTest.php b/Creational/AbstractFactory/Tests/AbstractFactoryTest.php index b51394a..97f4417 100644 --- a/Creational/AbstractFactory/Tests/AbstractFactoryTest.php +++ b/Creational/AbstractFactory/Tests/AbstractFactoryTest.php @@ -7,7 +7,7 @@ use DesignPatterns\Creational\AbstractFactory\HtmlFactory; use DesignPatterns\Creational\AbstractFactory\JsonFactory; /** - * AbstractFactoryTest tests concrete factories + * AbstractFactoryTest tests concrete factories. */ class AbstractFactoryTest extends \PHPUnit_Framework_TestCase { @@ -15,7 +15,7 @@ class AbstractFactoryTest extends \PHPUnit_Framework_TestCase { return array( array(new JsonFactory()), - array(new HtmlFactory()) + array(new HtmlFactory()), ); } @@ -31,7 +31,7 @@ class AbstractFactoryTest extends \PHPUnit_Framework_TestCase $article = array( $factory->createText('Lorem Ipsum'), $factory->createPicture('/image.jpg', 'caption'), - $factory->createText('footnotes') + $factory->createText('footnotes'), ); $this->assertContainsOnly('DesignPatterns\Creational\AbstractFactory\MediaInterface', $article); diff --git a/Creational/AbstractFactory/Text.php b/Creational/AbstractFactory/Text.php index 5d2da89..30984f3 100644 --- a/Creational/AbstractFactory/Text.php +++ b/Creational/AbstractFactory/Text.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Creational\AbstractFactory; /** - * Class Text + * Class Text. */ abstract class Text implements MediaInterface { diff --git a/Creational/Builder/BikeBuilder.php b/Creational/Builder/BikeBuilder.php index 53d53d3..f83c5db 100644 --- a/Creational/Builder/BikeBuilder.php +++ b/Creational/Builder/BikeBuilder.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Creational\Builder; /** - * BikeBuilder builds bike + * BikeBuilder builds bike. */ class BikeBuilder implements BuilderInterface { diff --git a/Creational/Builder/CarBuilder.php b/Creational/Builder/CarBuilder.php index 7725176..a0693d0 100644 --- a/Creational/Builder/CarBuilder.php +++ b/Creational/Builder/CarBuilder.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Creational\Builder; /** - * CarBuilder builds car + * CarBuilder builds car. */ class CarBuilder implements BuilderInterface { diff --git a/Creational/Builder/Director.php b/Creational/Builder/Director.php index 3d125d9..642cd1b 100644 --- a/Creational/Builder/Director.php +++ b/Creational/Builder/Director.php @@ -10,9 +10,8 @@ namespace DesignPatterns\Creational\Builder; */ class Director { - /** - * The director don't know about concrete part + * The director don't know about concrete part. * * @param BuilderInterface $builder * diff --git a/Creational/Builder/Parts/Bike.php b/Creational/Builder/Parts/Bike.php index 6efefe9..e5adbba 100644 --- a/Creational/Builder/Parts/Bike.php +++ b/Creational/Builder/Parts/Bike.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Creational\Builder\Parts; /** - * Bike is a bike + * Bike is a bike. */ class Bike extends Vehicle { diff --git a/Creational/Builder/Parts/Car.php b/Creational/Builder/Parts/Car.php index 1d4496c..e345ea9 100644 --- a/Creational/Builder/Parts/Car.php +++ b/Creational/Builder/Parts/Car.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Creational\Builder\Parts; /** - * Car is a car + * Car is a car. */ class Car extends Vehicle { diff --git a/Creational/Builder/Parts/Door.php b/Creational/Builder/Parts/Door.php index 526d41b..fc12608 100644 --- a/Creational/Builder/Parts/Door.php +++ b/Creational/Builder/Parts/Door.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Creational\Builder\Parts; /** - * Class Door + * Class Door. */ class Door { diff --git a/Creational/Builder/Parts/Engine.php b/Creational/Builder/Parts/Engine.php index 0b2fad0..5232ab3 100644 --- a/Creational/Builder/Parts/Engine.php +++ b/Creational/Builder/Parts/Engine.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Creational\Builder\Parts; /** - * Class Engine + * Class Engine. */ class Engine { diff --git a/Creational/Builder/Parts/Vehicle.php b/Creational/Builder/Parts/Vehicle.php index 492eade..487be57 100644 --- a/Creational/Builder/Parts/Vehicle.php +++ b/Creational/Builder/Parts/Vehicle.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Creational\Builder\Parts; /** - * VehicleInterface is a contract for a vehicle + * VehicleInterface is a contract for a vehicle. */ abstract class Vehicle { diff --git a/Creational/Builder/Parts/Wheel.php b/Creational/Builder/Parts/Wheel.php index 7fb60fd..0a1afbd 100644 --- a/Creational/Builder/Parts/Wheel.php +++ b/Creational/Builder/Parts/Wheel.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Creational\Builder\Parts; /** - * Class Wheel + * Class Wheel. */ class Wheel { diff --git a/Creational/Builder/Tests/DirectorTest.php b/Creational/Builder/Tests/DirectorTest.php index 0520bfe..9f07b83 100644 --- a/Creational/Builder/Tests/DirectorTest.php +++ b/Creational/Builder/Tests/DirectorTest.php @@ -2,17 +2,16 @@ namespace DesignPatterns\Creational\Builder\Tests; -use DesignPatterns\Creational\Builder\Director; -use DesignPatterns\Creational\Builder\CarBuilder; use DesignPatterns\Creational\Builder\BikeBuilder; use DesignPatterns\Creational\Builder\BuilderInterface; +use DesignPatterns\Creational\Builder\CarBuilder; +use DesignPatterns\Creational\Builder\Director; /** - * DirectorTest tests the builder pattern + * DirectorTest tests the builder pattern. */ class DirectorTest extends \PHPUnit_Framework_TestCase { - protected $director; protected function setUp() @@ -24,7 +23,7 @@ class DirectorTest extends \PHPUnit_Framework_TestCase { return array( array(new CarBuilder()), - array(new BikeBuilder()) + array(new BikeBuilder()), ); } diff --git a/Creational/FactoryMethod/Bicycle.php b/Creational/FactoryMethod/Bicycle.php index 01fa8a0..8e41f88 100644 --- a/Creational/FactoryMethod/Bicycle.php +++ b/Creational/FactoryMethod/Bicycle.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Creational\FactoryMethod; /** - * Bicycle is a bicycle + * Bicycle is a bicycle. */ class Bicycle implements VehicleInterface { @@ -13,7 +13,7 @@ class Bicycle implements VehicleInterface protected $color; /** - * sets the color of the bicycle + * sets the color of the bicycle. * * @param string $rgb */ diff --git a/Creational/FactoryMethod/FactoryMethod.php b/Creational/FactoryMethod/FactoryMethod.php index dd24b15..fa3d4a3 100644 --- a/Creational/FactoryMethod/FactoryMethod.php +++ b/Creational/FactoryMethod/FactoryMethod.php @@ -3,16 +3,15 @@ namespace DesignPatterns\Creational\FactoryMethod; /** - * class FactoryMethod + * class FactoryMethod. */ abstract class FactoryMethod { - const CHEAP = 1; const FAST = 2; /** - * The children of the class must implement this method + * The children of the class must implement this method. * * Sometimes this method can be public to get "raw" object * @@ -23,7 +22,7 @@ abstract class FactoryMethod abstract protected function createVehicle($type); /** - * Creates a new vehicle + * Creates a new vehicle. * * @param int $type * @@ -32,7 +31,7 @@ abstract class FactoryMethod public function create($type) { $obj = $this->createVehicle($type); - $obj->setColor("#f00"); + $obj->setColor('#f00'); return $obj; } diff --git a/Creational/FactoryMethod/Ferrari.php b/Creational/FactoryMethod/Ferrari.php index c905f91..9434e3d 100644 --- a/Creational/FactoryMethod/Ferrari.php +++ b/Creational/FactoryMethod/Ferrari.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Creational\FactoryMethod; /** - * Ferrari is a italian car + * Ferrari is a italian car. */ class Ferrari implements VehicleInterface { diff --git a/Creational/FactoryMethod/GermanFactory.php b/Creational/FactoryMethod/GermanFactory.php index 67306e9..1f65eb4 100644 --- a/Creational/FactoryMethod/GermanFactory.php +++ b/Creational/FactoryMethod/GermanFactory.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Creational\FactoryMethod; /** - * GermanFactory is a vehicle factory in Germany + * GermanFactory is a vehicle factory in Germany. */ class GermanFactory extends FactoryMethod { diff --git a/Creational/FactoryMethod/ItalianFactory.php b/Creational/FactoryMethod/ItalianFactory.php index c7010e0..25eeaf1 100644 --- a/Creational/FactoryMethod/ItalianFactory.php +++ b/Creational/FactoryMethod/ItalianFactory.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Creational\FactoryMethod; /** - * ItalianFactory is vehicle factory in Italy + * ItalianFactory is vehicle factory in Italy. */ class ItalianFactory extends FactoryMethod { diff --git a/Creational/FactoryMethod/Porsche.php b/Creational/FactoryMethod/Porsche.php index cba25ce..bdabb87 100644 --- a/Creational/FactoryMethod/Porsche.php +++ b/Creational/FactoryMethod/Porsche.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Creational\FactoryMethod; /** - * Porsche is a german car + * Porsche is a german car. */ class Porsche implements VehicleInterface { diff --git a/Creational/FactoryMethod/Tests/FactoryMethodTest.php b/Creational/FactoryMethod/Tests/FactoryMethodTest.php index acbe0c6..6b1c4d2 100644 --- a/Creational/FactoryMethod/Tests/FactoryMethodTest.php +++ b/Creational/FactoryMethod/Tests/FactoryMethodTest.php @@ -7,21 +7,20 @@ use DesignPatterns\Creational\FactoryMethod\GermanFactory; use DesignPatterns\Creational\FactoryMethod\ItalianFactory; /** - * FactoryMethodTest tests the factory method pattern + * FactoryMethodTest tests the factory method pattern. */ class FactoryMethodTest extends \PHPUnit_Framework_TestCase { - protected $type = array( FactoryMethod::CHEAP, - FactoryMethod::FAST + FactoryMethod::FAST, ); public function getShop() { return array( array(new GermanFactory()), - array(new ItalianFactory()) + array(new ItalianFactory()), ); } diff --git a/Creational/FactoryMethod/VehicleInterface.php b/Creational/FactoryMethod/VehicleInterface.php index a734b61..ccb05ee 100644 --- a/Creational/FactoryMethod/VehicleInterface.php +++ b/Creational/FactoryMethod/VehicleInterface.php @@ -3,12 +3,12 @@ namespace DesignPatterns\Creational\FactoryMethod; /** - * VehicleInterface is a contract for a vehicle + * VehicleInterface is a contract for a vehicle. */ interface VehicleInterface { /** - * sets the color of the vehicle + * sets the color of the vehicle. * * @param string $rgb */ diff --git a/Creational/Multiton/Multiton.php b/Creational/Multiton/Multiton.php index 44f1ef0..5338e62 100644 --- a/Creational/Multiton/Multiton.php +++ b/Creational/Multiton/Multiton.php @@ -3,24 +3,22 @@ namespace DesignPatterns\Creational\Multiton; /** - * class Multiton + * class Multiton. */ class Multiton { /** - * - * the first instance + * the first instance. */ const INSTANCE_1 = '1'; /** - * - * the second instance + * the second instance. */ const INSTANCE_2 = '2'; /** - * holds the named instances + * holds the named instances. * * @var array */ @@ -28,7 +26,6 @@ class Multiton /** * should not be called from outside: private! - * */ private function __construct() { @@ -36,7 +33,7 @@ class Multiton /** * gets the instance with the given name, e.g. Multiton::INSTANCE_1 - * uses lazy initialization + * uses lazy initialization. * * @param string $instanceName * @@ -52,7 +49,7 @@ class Multiton } /** - * prevent instance from being cloned + * prevent instance from being cloned. * * @return void */ @@ -61,7 +58,7 @@ class Multiton } /** - * prevent instance from being unserialized + * prevent instance from being unserialized. * * @return void */ diff --git a/Creational/Pool/Pool.php b/Creational/Pool/Pool.php index e3a809b..7dcc6e3 100644 --- a/Creational/Pool/Pool.php +++ b/Creational/Pool/Pool.php @@ -4,7 +4,6 @@ namespace DesignPatterns\Creational\Pool; class Pool { - private $instances = array(); private $class; diff --git a/Creational/Pool/Processor.php b/Creational/Pool/Processor.php index 957e91f..89179b9 100644 --- a/Creational/Pool/Processor.php +++ b/Creational/Pool/Processor.php @@ -4,11 +4,10 @@ namespace DesignPatterns\Creational\Pool; class Processor { - private $pool; private $processing = 0; private $maxProcesses = 3; - private $waitingQueue = []; + private $waitingQueue = array(); public function __construct(Pool $pool) { diff --git a/Creational/Pool/Worker.php b/Creational/Pool/Worker.php index acdc1ba..08d76b8 100644 --- a/Creational/Pool/Worker.php +++ b/Creational/Pool/Worker.php @@ -4,7 +4,6 @@ namespace DesignPatterns\Creational\Pool; class Worker { - public function __construct() { // let's say that constuctor does really expensive work... diff --git a/Creational/Prototype/BarBookPrototype.php b/Creational/Prototype/BarBookPrototype.php index 4354a60..7c9b72b 100644 --- a/Creational/Prototype/BarBookPrototype.php +++ b/Creational/Prototype/BarBookPrototype.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Creational\Prototype; /** - * Class BarBookPrototype + * Class BarBookPrototype. */ class BarBookPrototype extends BookPrototype { @@ -13,7 +13,7 @@ class BarBookPrototype extends BookPrototype protected $category = 'Bar'; /** - * empty clone + * empty clone. */ public function __clone() { diff --git a/Creational/Prototype/BookPrototype.php b/Creational/Prototype/BookPrototype.php index 18d4871..e0fafa6 100644 --- a/Creational/Prototype/BookPrototype.php +++ b/Creational/Prototype/BookPrototype.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Creational\Prototype; /** - * class BookPrototype + * class BookPrototype. */ abstract class BookPrototype { @@ -19,6 +19,7 @@ abstract class BookPrototype /** * @abstract + * * @return void */ abstract public function __clone(); diff --git a/Creational/Prototype/FooBookPrototype.php b/Creational/Prototype/FooBookPrototype.php index 9707bfd..95ea9e6 100644 --- a/Creational/Prototype/FooBookPrototype.php +++ b/Creational/Prototype/FooBookPrototype.php @@ -3,14 +3,14 @@ namespace DesignPatterns\Creational\Prototype; /** - * Class FooBookPrototype + * Class FooBookPrototype. */ class FooBookPrototype extends BookPrototype { protected $category = 'Foo'; /** - * empty clone + * empty clone. */ public function __clone() { diff --git a/Creational/Prototype/index.php b/Creational/Prototype/index.php index f268e5c..d0f6e94 100644 --- a/Creational/Prototype/index.php +++ b/Creational/Prototype/index.php @@ -8,10 +8,10 @@ $barPrototype = new BarBookPrototype(); // now lets say we need 10,000 books of foo and 5,000 of bar ... for ($i = 0; $i < 10000; $i++) { $book = clone $fooPrototype; - $book->setTitle('Foo Book No ' . $i); + $book->setTitle('Foo Book No '.$i); } for ($i = 0; $i < 5000; $i++) { $book = clone $barPrototype; - $book->setTitle('Bar Book No ' . $i); + $book->setTitle('Bar Book No '.$i); } diff --git a/Creational/SimpleFactory/Bicycle.php b/Creational/SimpleFactory/Bicycle.php index 67215f1..defa801 100644 --- a/Creational/SimpleFactory/Bicycle.php +++ b/Creational/SimpleFactory/Bicycle.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Creational\SimpleFactory; /** - * Bicycle is a bicycle + * Bicycle is a bicycle. */ class Bicycle implements VehicleInterface { diff --git a/Creational/SimpleFactory/ConcreteFactory.php b/Creational/SimpleFactory/ConcreteFactory.php index dd8acf8..5f4cd2d 100644 --- a/Creational/SimpleFactory/ConcreteFactory.php +++ b/Creational/SimpleFactory/ConcreteFactory.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Creational\SimpleFactory; /** - * class ConcreteFactory + * class ConcreteFactory. */ class ConcreteFactory { @@ -19,18 +19,19 @@ class ConcreteFactory public function __construct() { $this->typeList = array( - 'bicycle' => __NAMESPACE__ . '\Bicycle', - 'other' => __NAMESPACE__ . '\Scooter' + 'bicycle' => __NAMESPACE__.'\Bicycle', + 'other' => __NAMESPACE__.'\Scooter', ); } /** - * Creates a vehicle + * Creates a vehicle. * * @param string $type a known type key * - * @return VehicleInterface a new instance of VehicleInterface * @throws \InvalidArgumentException + * + * @return VehicleInterface a new instance of VehicleInterface */ public function createVehicle($type) { diff --git a/Creational/SimpleFactory/Scooter.php b/Creational/SimpleFactory/Scooter.php index 81fa505..e1db734 100644 --- a/Creational/SimpleFactory/Scooter.php +++ b/Creational/SimpleFactory/Scooter.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Creational\SimpleFactory; /** - * Scooter is a Scooter + * Scooter is a Scooter. */ class Scooter implements VehicleInterface { diff --git a/Creational/SimpleFactory/Tests/SimpleFactoryTest.php b/Creational/SimpleFactory/Tests/SimpleFactoryTest.php index 1fffda3..c913d96 100644 --- a/Creational/SimpleFactory/Tests/SimpleFactoryTest.php +++ b/Creational/SimpleFactory/Tests/SimpleFactoryTest.php @@ -5,11 +5,10 @@ namespace DesignPatterns\Creational\SimpleFactory\Tests; use DesignPatterns\Creational\SimpleFactory\ConcreteFactory; /** - * SimpleFactoryTest tests the Simple Factory pattern + * SimpleFactoryTest tests the Simple Factory pattern. */ class SimpleFactoryTest extends \PHPUnit_Framework_TestCase { - protected $factory; protected function setUp() @@ -21,7 +20,7 @@ class SimpleFactoryTest extends \PHPUnit_Framework_TestCase { return array( array('bicycle'), - array('other') + array('other'), ); } diff --git a/Creational/SimpleFactory/VehicleInterface.php b/Creational/SimpleFactory/VehicleInterface.php index eb13a66..f2c8d3f 100644 --- a/Creational/SimpleFactory/VehicleInterface.php +++ b/Creational/SimpleFactory/VehicleInterface.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Creational\SimpleFactory; /** - * VehicleInterface is a contract for a vehicle + * VehicleInterface is a contract for a vehicle. */ interface VehicleInterface { diff --git a/Creational/Singleton/Singleton.php b/Creational/Singleton/Singleton.php index 94f7a0a..650810e 100644 --- a/Creational/Singleton/Singleton.php +++ b/Creational/Singleton/Singleton.php @@ -2,10 +2,8 @@ namespace DesignPatterns\Creational\Singleton; -use DesignPatterns\Creational\Singleton\SingletonPatternViolationException; - /** - * class Singleton + * class Singleton. */ class Singleton { @@ -13,16 +11,16 @@ class Singleton * @var Singleton reference to singleton instance */ private static $instance; - + /** - * gets the instance via lazy initialization (created on first usage) + * gets the instance via lazy initialization (created on first usage). * * @return self */ public static function getInstance() { if (null === static::$instance) { - static::$instance = new static; + static::$instance = new static(); } return static::$instance; @@ -30,28 +28,31 @@ class Singleton /** * is not allowed to call from outside: private! - * */ private function __construct() { } /** - * prevent the instance from being cloned + * prevent the instance from being cloned. + * * @throws SingletonPatternViolationException + * * @return void */ - public final function __clone() + final public function __clone() { throw new SingletonPatternViolationException('This is a Singleton. Clone is forbidden'); } /** - * prevent from being unserialized + * prevent from being unserialized. + * * @throws SingletonPatternViolationException + * * @return void */ - public final function __wakeup() + final public function __wakeup() { throw new SingletonPatternViolationException('This is a Singleton. __wakeup usage is forbidden'); } diff --git a/Creational/Singleton/SingletonPatternViolationException.php b/Creational/Singleton/SingletonPatternViolationException.php index 38be5e6..b025b4a 100644 --- a/Creational/Singleton/SingletonPatternViolationException.php +++ b/Creational/Singleton/SingletonPatternViolationException.php @@ -4,5 +4,4 @@ namespace DesignPatterns\Creational\Singleton; class SingletonPatternViolationException extends \Exception { - } diff --git a/Creational/Singleton/Tests/SingletonTest.php b/Creational/Singleton/Tests/SingletonTest.php index 122d4dc..6b72285 100644 --- a/Creational/Singleton/Tests/SingletonTest.php +++ b/Creational/Singleton/Tests/SingletonTest.php @@ -5,11 +5,10 @@ namespace DesignPatterns\Creational\Singleton\Tests; use DesignPatterns\Creational\Singleton\Singleton; /** - * SingletonTest tests the singleton pattern + * SingletonTest tests the singleton pattern. */ class SingletonTest extends \PHPUnit_Framework_TestCase { - public function testUniqueness() { $firstCall = Singleton::getInstance(); @@ -29,6 +28,7 @@ class SingletonTest extends \PHPUnit_Framework_TestCase /** * @expectedException \DesignPatterns\Creational\Singleton\SingletonPatternViolationException + * * @return void */ public function testNoCloneAllowed() @@ -39,6 +39,7 @@ class SingletonTest extends \PHPUnit_Framework_TestCase /** * @expectedException \DesignPatterns\Creational\Singleton\SingletonPatternViolationException + * * @return void */ public function testNoSerializationAllowed() diff --git a/Creational/StaticFactory/FormatNumber.php b/Creational/StaticFactory/FormatNumber.php index 8f382f7..e577ab2 100644 --- a/Creational/StaticFactory/FormatNumber.php +++ b/Creational/StaticFactory/FormatNumber.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Creational\StaticFactory; /** - * Class FormatNumber + * Class FormatNumber. */ class FormatNumber implements FormatterInterface { diff --git a/Creational/StaticFactory/FormatString.php b/Creational/StaticFactory/FormatString.php index a0d174d..5cb9e28 100644 --- a/Creational/StaticFactory/FormatString.php +++ b/Creational/StaticFactory/FormatString.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Creational\StaticFactory; /** - * Class FormatString + * Class FormatString. */ class FormatString implements FormatterInterface { diff --git a/Creational/StaticFactory/FormatterInterface.php b/Creational/StaticFactory/FormatterInterface.php index 81b9149..349f8b6 100644 --- a/Creational/StaticFactory/FormatterInterface.php +++ b/Creational/StaticFactory/FormatterInterface.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Creational\StaticFactory; /** - * Class FormatterInterface + * Class FormatterInterface. */ interface FormatterInterface { diff --git a/Creational/StaticFactory/StaticFactory.php b/Creational/StaticFactory/StaticFactory.php index e4f2f96..e4c4f4b 100644 --- a/Creational/StaticFactory/StaticFactory.php +++ b/Creational/StaticFactory/StaticFactory.php @@ -4,23 +4,24 @@ namespace DesignPatterns\Creational\StaticFactory; /** * Note1: Remember, static => global => evil - * Note2: Cannot be subclassed or mock-upped or have multiple different instances + * Note2: Cannot be subclassed or mock-upped or have multiple different instances. */ class StaticFactory { /** - * the parametrized function to get create an instance + * the parametrized function to get create an instance. * * @param string $type * * @static * * @throws \InvalidArgumentException + * * @return FormatterInterface */ public static function factory($type) { - $className = __NAMESPACE__ . '\Format' . ucfirst($type); + $className = __NAMESPACE__.'\Format'.ucfirst($type); if (!class_exists($className)) { throw new \InvalidArgumentException('Missing format class.'); diff --git a/Creational/StaticFactory/Tests/StaticFactoryTest.php b/Creational/StaticFactory/Tests/StaticFactoryTest.php index f0304ca..61f65af 100644 --- a/Creational/StaticFactory/Tests/StaticFactoryTest.php +++ b/Creational/StaticFactory/Tests/StaticFactoryTest.php @@ -5,17 +5,15 @@ namespace DesignPatterns\Creational\StaticFactory\Tests; use DesignPatterns\Creational\StaticFactory\StaticFactory; /** - * Tests for Static Factory pattern - * + * Tests for Static Factory pattern. */ class StaticFactoryTest extends \PHPUnit_Framework_TestCase { - public function getTypeList() { return array( array('string'), - array('number') + array('number'), ); } @@ -33,6 +31,6 @@ class StaticFactoryTest extends \PHPUnit_Framework_TestCase */ public function testException() { - StaticFactory::factory(""); + StaticFactory::factory(''); } } diff --git a/More/Delegation/JuniorDeveloper.php b/More/Delegation/JuniorDeveloper.php index 7506181..0946dad 100644 --- a/More/Delegation/JuniorDeveloper.php +++ b/More/Delegation/JuniorDeveloper.php @@ -3,13 +3,12 @@ namespace DesignPatterns\More\Delegation; /** - * Class JuniorDeveloper - * @package DesignPatterns\Delegation + * Class JuniorDeveloper. */ class JuniorDeveloper { public function writeBadCode() { - return "Some junior developer generated code..."; + return 'Some junior developer generated code...'; } } diff --git a/More/Delegation/TeamLead.php b/More/Delegation/TeamLead.php index 315bd3b..9b75190 100644 --- a/More/Delegation/TeamLead.php +++ b/More/Delegation/TeamLead.php @@ -3,9 +3,7 @@ namespace DesignPatterns\More\Delegation; /** - * Class TeamLead - * @package DesignPatterns\Delegation - * The `TeamLead` class, he delegate work to `JuniorDeveloper` + * Class TeamLead. */ class TeamLead { @@ -13,7 +11,8 @@ class TeamLead protected $slave; /** - * Give junior developer into teamlead submission + * Give junior developer into teamlead submission. + * * @param JuniorDeveloper $junior */ public function __construct(JuniorDeveloper $junior) @@ -22,7 +21,8 @@ class TeamLead } /** - * TeamLead drink coffee, junior work + * TeamLead drink coffee, junior work. + * * @return mixed */ public function writeCode() diff --git a/More/Delegation/Tests/DelegationTest.php b/More/Delegation/Tests/DelegationTest.php index b19f871..7d0a33b 100644 --- a/More/Delegation/Tests/DelegationTest.php +++ b/More/Delegation/Tests/DelegationTest.php @@ -5,7 +5,7 @@ namespace DesignPatterns\More\Delegation\Tests; use DesignPatterns\More\Delegation; /** - * DelegationTest tests the delegation pattern + * DelegationTest tests the delegation pattern. */ class DelegationTest extends \PHPUnit_Framework_TestCase { diff --git a/More/EAV/Attribute.php b/More/EAV/Attribute.php index 7a1a88e..3874360 100644 --- a/More/EAV/Attribute.php +++ b/More/EAV/Attribute.php @@ -5,7 +5,7 @@ namespace DesignPatterns\More\EAV; use SplObjectStorage; /** - * Class Attribute + * Class Attribute. */ class Attribute implements ValueAccessInterface { @@ -34,6 +34,7 @@ class Attribute implements ValueAccessInterface /** * @param ValueInterface $value + * * @return $this */ public function addValue(ValueInterface $value) @@ -47,6 +48,7 @@ class Attribute implements ValueAccessInterface /** * @param ValueInterface $value + * * @return $this */ public function removeValue(ValueInterface $value) @@ -68,6 +70,7 @@ class Attribute implements ValueAccessInterface /** * @param string $name + * * @return $this */ public function setName($name) diff --git a/More/EAV/Entity.php b/More/EAV/Entity.php index e92444e..ff26589 100644 --- a/More/EAV/Entity.php +++ b/More/EAV/Entity.php @@ -5,7 +5,7 @@ namespace DesignPatterns\More\EAV; use SplObjectStorage; /** - * Class Entity + * Class Entity. */ class Entity implements ValueAccessInterface { @@ -34,6 +34,7 @@ class Entity implements ValueAccessInterface /** * @param ValueInterface $value + * * @return $this */ public function addValue(ValueInterface $value) @@ -47,6 +48,7 @@ class Entity implements ValueAccessInterface /** * @param ValueInterface $value + * * @return $this */ public function removeValue(ValueInterface $value) @@ -68,6 +70,7 @@ class Entity implements ValueAccessInterface /** * @param string $name + * * @return $this */ public function setName($name) diff --git a/More/EAV/Tests/AttributeTest.php b/More/EAV/Tests/AttributeTest.php index 7e7efec..4affe41 100644 --- a/More/EAV/Tests/AttributeTest.php +++ b/More/EAV/Tests/AttributeTest.php @@ -6,7 +6,7 @@ use DesignPatterns\More\EAV\Attribute; use DesignPatterns\More\EAV\Value; /** - * AttributeTest tests the Attribute model of EAV pattern + * AttributeTest tests the Attribute model of EAV pattern. */ class AttributeTest extends \PHPUnit_Framework_TestCase { diff --git a/More/EAV/Tests/EntityTest.php b/More/EAV/Tests/EntityTest.php index 42c10f3..ecd6c40 100644 --- a/More/EAV/Tests/EntityTest.php +++ b/More/EAV/Tests/EntityTest.php @@ -2,19 +2,19 @@ namespace DesignPatterns\More\EAV\Tests; -use DesignPatterns\More\EAV\Entity; use DesignPatterns\More\EAV\Attribute; +use DesignPatterns\More\EAV\Entity; use DesignPatterns\More\EAV\Value; /** - * EntityTest tests the Entity model of EAV pattern + * EntityTest tests the Entity model of EAV pattern. */ class EntityTest extends \PHPUnit_Framework_TestCase { /** * @dataProvider valueProvider * - * @var string $name + * @var string */ public function testSetGetName($name) { @@ -27,7 +27,7 @@ class EntityTest extends \PHPUnit_Framework_TestCase /** * @dataProvider valueProvider * - * @var string $name + * @var string * @var Value[] $values */ public function testAddValue($name, array $values) @@ -47,7 +47,7 @@ class EntityTest extends \PHPUnit_Framework_TestCase * @depends testAddValue * @dataProvider valueProvider * - * @var string $name + * @var string * @var Value[] $values */ public function testRemoveValue($name, array $values) diff --git a/More/EAV/Tests/ValueTest.php b/More/EAV/Tests/ValueTest.php index 1b96521..f80f070 100644 --- a/More/EAV/Tests/ValueTest.php +++ b/More/EAV/Tests/ValueTest.php @@ -6,7 +6,7 @@ use DesignPatterns\More\EAV\Attribute; use DesignPatterns\More\EAV\Value; /** - * ValueTest tests the Value model of EAV pattern + * ValueTest tests the Value model of EAV pattern. */ class ValueTest extends \PHPUnit_Framework_TestCase { diff --git a/More/EAV/Value.php b/More/EAV/Value.php index 127f8ce..2c156a9 100644 --- a/More/EAV/Value.php +++ b/More/EAV/Value.php @@ -3,7 +3,7 @@ namespace DesignPatterns\More\EAV; /** - * Class Value + * Class Value. */ class Value implements ValueInterface { @@ -28,6 +28,7 @@ class Value implements ValueInterface /** * @param Attribute $attribute + * * @return $this */ public function setAttribute(Attribute $attribute) @@ -57,6 +58,7 @@ class Value implements ValueInterface /** * @param string $name + * * @return $this */ public function setName($name) diff --git a/More/EAV/ValueAccessInterface.php b/More/EAV/ValueAccessInterface.php index 27820a8..dde67b2 100644 --- a/More/EAV/ValueAccessInterface.php +++ b/More/EAV/ValueAccessInterface.php @@ -3,7 +3,7 @@ namespace DesignPatterns\More\EAV; /** - * Interface ValueAccessInterface + * Interface ValueAccessInterface. */ interface ValueAccessInterface { diff --git a/More/EAV/ValueInterface.php b/More/EAV/ValueInterface.php index c041835..3737f67 100644 --- a/More/EAV/ValueInterface.php +++ b/More/EAV/ValueInterface.php @@ -3,7 +3,7 @@ namespace DesignPatterns\More\EAV; /** - * Interface ValueInterface + * Interface ValueInterface. */ interface ValueInterface { diff --git a/More/EAV/example.php b/More/EAV/example.php index c5bb5c4..32ba5de 100644 --- a/More/EAV/example.php +++ b/More/EAV/example.php @@ -2,31 +2,31 @@ require '../../vendor/autoload.php'; -use DesignPatterns\More\EAV\Entity; use DesignPatterns\More\EAV\Attribute; +use DesignPatterns\More\EAV\Entity; use DesignPatterns\More\EAV\Value; // Create color attribute $color = (new Attribute())->setName('Color'); // Create color values -$colorSilver = (new Value($color))->setName('Silver'); -$colorGold = (new Value($color))->setName('Gold'); +$colorSilver = (new Value($color))->setName('Silver'); +$colorGold = (new Value($color))->setName('Gold'); $colorSpaceGrey = (new Value($color))->setName('Space Grey'); // Create memory attribute -$memory = (new Attribute())->setName('Memory'); +$memory = (new Attribute())->setName('Memory'); // Create memory values -$memory4Gb = (new Value($memory))->setName('4GB'); -$memory8Gb = (new Value($memory))->setName('8GB'); +$memory4Gb = (new Value($memory))->setName('4GB'); +$memory8Gb = (new Value($memory))->setName('8GB'); $memory16Gb = (new Value($memory))->setName('16GB'); // Create storage attribute -$storage = (new Attribute())->setName('Storage'); +$storage = (new Attribute())->setName('Storage'); // Create storage values -$storage128Gb = (new Value($storage))->setName('128GB'); -$storage256Gb = (new Value($storage))->setName('256GB'); -$storage512Gb = (new Value($storage))->setName('512GB'); -$storage1Tb = (new Value($storage))->setName('1TB'); +$storage128Gb = (new Value($storage))->setName('128GB'); +$storage256Gb = (new Value($storage))->setName('256GB'); +$storage512Gb = (new Value($storage))->setName('512GB'); +$storage1Tb = (new Value($storage))->setName('1TB'); // Create entities with specific values $mac = (new Entity()) @@ -39,8 +39,7 @@ $mac = (new Entity()) ->addValue($memory8Gb) // storages ->addValue($storage256Gb) - ->addValue($storage512Gb) -; + ->addValue($storage512Gb); $macAir = (new Entity()) ->setName('MacBook Air') @@ -52,8 +51,7 @@ $macAir = (new Entity()) // storages ->addValue($storage128Gb) ->addValue($storage256Gb) - ->addValue($storage512Gb) -; + ->addValue($storage512Gb); $macPro = (new Entity()) ->setName('MacBook Pro') @@ -66,5 +64,4 @@ $macPro = (new Entity()) ->addValue($storage128Gb) ->addValue($storage256Gb) ->addValue($storage512Gb) - ->addValue($storage1Tb) -; + ->addValue($storage1Tb); diff --git a/More/Repository/MemoryStorage.php b/More/Repository/MemoryStorage.php index 1da09bc..44276d5 100644 --- a/More/Repository/MemoryStorage.php +++ b/More/Repository/MemoryStorage.php @@ -2,15 +2,11 @@ namespace DesignPatterns\More\Repository; -use DesignPatterns\More\Repository\Storage; - /** - * Class MemoryStorage - * @package DesignPatterns\Repository + * Class MemoryStorage. */ class MemoryStorage implements Storage { - private $data; private $lastId; @@ -26,6 +22,7 @@ class MemoryStorage implements Storage public function persist($data) { $this->data[++$this->lastId] = $data; + return $this->lastId; } diff --git a/More/Repository/Post.php b/More/Repository/Post.php index 9435d2e..e9990b4 100644 --- a/More/Repository/Post.php +++ b/More/Repository/Post.php @@ -3,10 +3,9 @@ namespace DesignPatterns\More\Repository; /** - * Post represents entity for some post that user left on the site + * Post represents entity for some post that user left on the site. * * Class Post - * @package DesignPatterns\Repository */ class Post { diff --git a/More/Repository/PostRepository.php b/More/Repository/PostRepository.php index 8b0ddac..e7687f3 100644 --- a/More/Repository/PostRepository.php +++ b/More/Repository/PostRepository.php @@ -2,11 +2,9 @@ namespace DesignPatterns\More\Repository; -use DesignPatterns\More\Repository\Storage; - /** * Repository for class Post - * This class is between Entity layer(class Post) and access object layer(interface Storage) + * This class is between Entity layer(class Post) and access object layer(interface Storage). * * Repository encapsulates the set of objects persisted in a data store and the operations performed over them * providing a more object-oriented view of the persistence layer @@ -15,7 +13,6 @@ use DesignPatterns\More\Repository\Storage; * between the domain and data mapping layers * * Class PostRepository - * @package DesignPatterns\Repository */ class PostRepository { @@ -27,16 +24,17 @@ class PostRepository } /** - * Returns Post object by specified id + * Returns Post object by specified id. * * @param int $id + * * @return Post|null */ public function getById($id) { $arrayData = $this->persistence->retrieve($id); if (is_null($arrayData)) { - return null; + return; } $post = new Post(); @@ -50,9 +48,10 @@ class PostRepository } /** - * Save post object and populate it with id + * Save post object and populate it with id. * * @param Post $post + * * @return Post */ public function save(Post $post) @@ -61,17 +60,19 @@ class PostRepository 'author' => $post->getAuthor(), 'created' => $post->getCreated(), 'text' => $post->getText(), - 'title' => $post->getTitle() + 'title' => $post->getTitle(), )); $post->setId($id); + return $post; } /** - * Deletes specified Post object + * Deletes specified Post object. * * @param Post $post + * * @return bool */ public function delete(Post $post) diff --git a/More/Repository/Storage.php b/More/Repository/Storage.php index 4d528b4..a730f09 100644 --- a/More/Repository/Storage.php +++ b/More/Repository/Storage.php @@ -3,38 +3,39 @@ namespace DesignPatterns\More\Repository; /** - * Interface Storage + * Interface Storage. * * This interface describes methods for accessing storage. * Concrete realization could be whatever we want - in memory, relational database, NoSQL database and etc - * - * @package DesignPatterns\Repository */ interface Storage { /** * Method to persist data - * Returns new id for just persisted data + * Returns new id for just persisted data. * * @param array() $data + * * @return int */ public function persist($data); /** * Returns data by specified id. - * If there is no such data null is returned + * If there is no such data null is returned. * * @param int $id + * * @return array|null */ public function retrieve($id); /** * Delete data specified by id - * If there is no such data - false returns, if data has been successfully deleted - true returns + * If there is no such data - false returns, if data has been successfully deleted - true returns. * * @param int $id + * * @return bool */ public function delete($id); diff --git a/More/ServiceLocator/ServiceLocator.php b/More/ServiceLocator/ServiceLocator.php index 6699eca..b631479 100644 --- a/More/ServiceLocator/ServiceLocator.php +++ b/More/ServiceLocator/ServiceLocator.php @@ -27,21 +27,21 @@ class ServiceLocator implements ServiceLocatorInterface public function __construct() { - $this->services = array(); + $this->services = array(); $this->instantiated = array(); - $this->shared = array(); + $this->shared = array(); } /** * Registers a service with specific interface. * - * @param string $interface + * @param string $interface * @param string|object $service - * @param bool $share + * @param bool $share */ public function add($interface, $service, $share = true) { - /** + /* * When you add a service, you should register it * with its interface or with a string that you can use * in the future even if you will change the service implementation. @@ -51,7 +51,7 @@ class ServiceLocator implements ServiceLocatorInterface $this->instantiated[$interface] = $service; } $this->services[$interface] = (is_object($service) ? get_class($service) : $service); - $this->shared[$interface] = $share; + $this->shared[$interface] = $share; } /** @@ -63,7 +63,7 @@ class ServiceLocator implements ServiceLocatorInterface */ public function has($interface) { - return (isset($this->services[$interface]) || isset($this->instantiated[$interface])); + return isset($this->services[$interface]) || isset($this->instantiated[$interface]); } /** @@ -101,6 +101,7 @@ class ServiceLocator implements ServiceLocatorInterface if ($this->shared[$interface]) { $this->instantiated[$interface] = $object; } + return $object; } } diff --git a/More/ServiceLocator/Tests/ServiceLocatorTest.php b/More/ServiceLocator/Tests/ServiceLocatorTest.php index d6b7ef6..72f8607 100644 --- a/More/ServiceLocator/Tests/ServiceLocatorTest.php +++ b/More/ServiceLocator/Tests/ServiceLocatorTest.php @@ -5,7 +5,7 @@ namespace DesignPatterns\More\ServiceLocator\Tests; use DesignPatterns\More\ServiceLocator\DatabaseService; use DesignPatterns\More\ServiceLocator\LogService; use DesignPatterns\More\ServiceLocator\ServiceLocator; -use \PHPUnit_Framework_TestCase as TestCase; +use PHPUnit_Framework_TestCase as TestCase; class ServiceLocatorTest extends TestCase { @@ -26,8 +26,8 @@ class ServiceLocatorTest extends TestCase public function setUp() { - $this->serviceLocator = new ServiceLocator(); - $this->logService = new LogService(); + $this->serviceLocator = new ServiceLocator(); + $this->logService = new LogService(); $this->databaseService = new DatabaseService(); } diff --git a/Structural/Adapter/Book.php b/Structural/Adapter/Book.php index ae3c6dc..6458beb 100644 --- a/Structural/Adapter/Book.php +++ b/Structural/Adapter/Book.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Structural\Adapter; /** - * Book is a concrete and standard paper book + * Book is a concrete and standard paper book. */ class Book implements PaperBookInterface { diff --git a/Structural/Adapter/EBookAdapter.php b/Structural/Adapter/EBookAdapter.php index a6c6476..3e4564a 100644 --- a/Structural/Adapter/EBookAdapter.php +++ b/Structural/Adapter/EBookAdapter.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Structural\Adapter; /** - * EBookAdapter is an adapter to fit an e-book like a paper book + * EBookAdapter is an adapter to fit an e-book like a paper book. * * This is the adapter here. Notice it implements PaperBookInterface, * therefore you don't have to change the code of the client which using paper book. @@ -16,7 +16,7 @@ class EBookAdapter implements PaperBookInterface protected $eBook; /** - * Notice the constructor, it "wraps" an electronic book + * Notice the constructor, it "wraps" an electronic book. * * @param EBookInterface $ebook */ @@ -26,7 +26,7 @@ class EBookAdapter implements PaperBookInterface } /** - * This class makes the proper translation from one interface to another + * This class makes the proper translation from one interface to another. */ public function open() { @@ -34,7 +34,7 @@ class EBookAdapter implements PaperBookInterface } /** - * turns pages + * turns pages. */ public function turnPage() { diff --git a/Structural/Adapter/EBookInterface.php b/Structural/Adapter/EBookInterface.php index 15e0222..bd3dc26 100644 --- a/Structural/Adapter/EBookInterface.php +++ b/Structural/Adapter/EBookInterface.php @@ -3,19 +3,19 @@ namespace DesignPatterns\Structural\Adapter; /** - * EBookInterface is a contract for an electronic book + * EBookInterface is a contract for an electronic book. */ interface EBookInterface { /** - * go to next page + * go to next page. * * @return mixed */ public function pressNext(); /** - * start the book + * start the book. * * @return mixed */ diff --git a/Structural/Adapter/Kindle.php b/Structural/Adapter/Kindle.php index 14dc485..06d4489 100644 --- a/Structural/Adapter/Kindle.php +++ b/Structural/Adapter/Kindle.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Structural\Adapter; /** - * Kindle is a concrete electronic book + * Kindle is a concrete electronic book. */ class Kindle implements EBookInterface { diff --git a/Structural/Adapter/PaperBookInterface.php b/Structural/Adapter/PaperBookInterface.php index 12f3103..4b62149 100644 --- a/Structural/Adapter/PaperBookInterface.php +++ b/Structural/Adapter/PaperBookInterface.php @@ -3,19 +3,19 @@ namespace DesignPatterns\Structural\Adapter; /** - * PaperBookInterface is a contract for a book + * PaperBookInterface is a contract for a book. */ interface PaperBookInterface { /** - * method to turn pages + * method to turn pages. * * @return mixed */ public function turnPage(); /** - * method to open the book + * method to open the book. * * @return mixed */ diff --git a/Structural/Adapter/Tests/AdapterTest.php b/Structural/Adapter/Tests/AdapterTest.php index ecbc9e2..fd7713b 100644 --- a/Structural/Adapter/Tests/AdapterTest.php +++ b/Structural/Adapter/Tests/AdapterTest.php @@ -2,14 +2,14 @@ namespace DesignPatterns\Structural\Adapter\Tests; +use DesignPatterns\Structural\Adapter\Book; use DesignPatterns\Structural\Adapter\EBookAdapter; use DesignPatterns\Structural\Adapter\Kindle; use DesignPatterns\Structural\Adapter\PaperBookInterface; -use DesignPatterns\Structural\Adapter\Book; /** * AdapterTest shows the use of an adapted e-book that behave like a book - * You don't have to change the code of your client + * You don't have to change the code of your client. */ class AdapterTest extends \PHPUnit_Framework_TestCase { @@ -21,13 +21,13 @@ class AdapterTest extends \PHPUnit_Framework_TestCase return array( array(new Book()), // we build a "wrapped" electronic book in the adapter - array(new EBookAdapter(new Kindle())) + array(new EBookAdapter(new Kindle())), ); } /** * This client only knows paper book but surprise, surprise, the second book - * is in fact an electronic book, but both work the same way + * is in fact an electronic book, but both work the same way. * * @param PaperBookInterface $book * diff --git a/Structural/Bridge/Assemble.php b/Structural/Bridge/Assemble.php index 2b60889..9b9d114 100644 --- a/Structural/Bridge/Assemble.php +++ b/Structural/Bridge/Assemble.php @@ -4,9 +4,8 @@ namespace DesignPatterns\Structural\Bridge; class Assemble implements Workshop { - public function work() { - print 'Assembled'; + echo 'Assembled'; } } diff --git a/Structural/Bridge/Car.php b/Structural/Bridge/Car.php index 2754199..89be431 100644 --- a/Structural/Bridge/Car.php +++ b/Structural/Bridge/Car.php @@ -3,11 +3,10 @@ namespace DesignPatterns\Structural\Bridge; /** - * Refined Abstraction + * Refined Abstraction. */ class Car extends Vehicle { - public function __construct(Workshop $workShop1, Workshop $workShop2) { parent::__construct($workShop1, $workShop2); @@ -15,7 +14,7 @@ class Car extends Vehicle public function manufacture() { - print 'Car '; + echo 'Car '; $this->workShop1->work(); $this->workShop2->work(); } diff --git a/Structural/Bridge/Motorcycle.php b/Structural/Bridge/Motorcycle.php index b021ce6..f008785 100644 --- a/Structural/Bridge/Motorcycle.php +++ b/Structural/Bridge/Motorcycle.php @@ -3,11 +3,10 @@ namespace DesignPatterns\Structural\Bridge; /** - * Refined Abstraction + * Refined Abstraction. */ class Motorcycle extends Vehicle { - public function __construct(Workshop $workShop1, Workshop $workShop2) { parent::__construct($workShop1, $workShop2); @@ -15,7 +14,7 @@ class Motorcycle extends Vehicle public function manufacture() { - print 'Motorcycle '; + echo 'Motorcycle '; $this->workShop1->work(); $this->workShop2->work(); } diff --git a/Structural/Bridge/Produce.php b/Structural/Bridge/Produce.php index b2b0505..a382f2d 100644 --- a/Structural/Bridge/Produce.php +++ b/Structural/Bridge/Produce.php @@ -3,13 +3,12 @@ namespace DesignPatterns\Structural\Bridge; /** - * Concrete Implementation + * Concrete Implementation. */ class Produce implements Workshop { - public function work() { - print 'Produced '; + echo 'Produced '; } } diff --git a/Structural/Bridge/Tests/BridgeTest.php b/Structural/Bridge/Tests/BridgeTest.php index e07afe9..0a89a86 100644 --- a/Structural/Bridge/Tests/BridgeTest.php +++ b/Structural/Bridge/Tests/BridgeTest.php @@ -9,7 +9,6 @@ use DesignPatterns\Structural\Bridge\Produce; class BridgeTest extends \PHPUnit_Framework_TestCase { - public function testCar() { $vehicle = new Car(new Produce(), new Assemble()); diff --git a/Structural/Bridge/Vehicle.php b/Structural/Bridge/Vehicle.php index 10b0d03..f519d70 100644 --- a/Structural/Bridge/Vehicle.php +++ b/Structural/Bridge/Vehicle.php @@ -3,11 +3,10 @@ namespace DesignPatterns\Structural\Bridge; /** - * Abstraction + * Abstraction. */ abstract class Vehicle { - protected $workShop1; protected $workShop2; diff --git a/Structural/Bridge/Workshop.php b/Structural/Bridge/Workshop.php index dc62886..9cb26c5 100644 --- a/Structural/Bridge/Workshop.php +++ b/Structural/Bridge/Workshop.php @@ -3,10 +3,9 @@ namespace DesignPatterns\Structural\Bridge; /** - * Implementer + * Implementer. */ interface Workshop { - public function work(); } diff --git a/Structural/Composite/Form.php b/Structural/Composite/Form.php index fbf3b50..42f1bc1 100644 --- a/Structural/Composite/Form.php +++ b/Structural/Composite/Form.php @@ -15,7 +15,7 @@ class Form extends FormElement /** * runs through all elements and calls render() on them, then returns the complete representation - * of the form + * of the form. * * from the outside, one will not see this and the form will act like a single object instance * @@ -28,7 +28,7 @@ class Form extends FormElement $formCode = ''; foreach ($this->elements as $element) { - $formCode .= $element->render($indent + 1) . PHP_EOL; + $formCode .= $element->render($indent + 1).PHP_EOL; } return $formCode; diff --git a/Structural/Composite/FormElement.php b/Structural/Composite/FormElement.php index 8063c89..0055aee 100644 --- a/Structural/Composite/FormElement.php +++ b/Structural/Composite/FormElement.php @@ -3,12 +3,12 @@ namespace DesignPatterns\Structural\Composite; /** - * Class FormElement + * Class FormElement. */ abstract class FormElement { /** - * renders the elements' code + * renders the elements' code. * * @param int $indent * diff --git a/Structural/Composite/InputElement.php b/Structural/Composite/InputElement.php index 30d8615..19786d5 100644 --- a/Structural/Composite/InputElement.php +++ b/Structural/Composite/InputElement.php @@ -3,12 +3,12 @@ namespace DesignPatterns\Structural\Composite; /** - * Class InputElement + * Class InputElement. */ class InputElement extends FormElement { /** - * renders the input element HTML + * renders the input element HTML. * * @param int $indent * @@ -16,6 +16,6 @@ class InputElement extends FormElement */ public function render($indent = 0) { - return str_repeat(' ', $indent) . ''; + return str_repeat(' ', $indent).''; } } diff --git a/Structural/Composite/Tests/CompositeTest.php b/Structural/Composite/Tests/CompositeTest.php index f3ee1d1..510a06b 100644 --- a/Structural/Composite/Tests/CompositeTest.php +++ b/Structural/Composite/Tests/CompositeTest.php @@ -5,11 +5,10 @@ namespace DesignPatterns\Structural\Composite\Tests; use DesignPatterns\Structural\Composite; /** - * FormTest tests the composite pattern on Form + * FormTest tests the composite pattern on Form. */ class CompositeTest extends \PHPUnit_Framework_TestCase { - public function testRender() { $form = new Composite\Form(); @@ -25,7 +24,7 @@ class CompositeTest extends \PHPUnit_Framework_TestCase /** * The all point of this pattern, a Composite must inherit from the node - * if you want to builld trees + * if you want to builld trees. */ public function testFormImplementsFormEelement() { diff --git a/Structural/Composite/TextElement.php b/Structural/Composite/TextElement.php index ed50294..48b33ba 100644 --- a/Structural/Composite/TextElement.php +++ b/Structural/Composite/TextElement.php @@ -3,12 +3,12 @@ namespace DesignPatterns\Structural\Composite; /** - * Class TextElement + * Class TextElement. */ class TextElement extends FormElement { /** - * renders the text element + * renders the text element. * * @param int $indent * @@ -16,6 +16,6 @@ class TextElement extends FormElement */ public function render($indent = 0) { - return str_repeat(' ', $indent) . 'this is a text element'; + return str_repeat(' ', $indent).'this is a text element'; } } diff --git a/Structural/DataMapper/Tests/DataMapperTest.php b/Structural/DataMapper/Tests/DataMapperTest.php index fb531e9..551c11e 100644 --- a/Structural/DataMapper/Tests/DataMapperTest.php +++ b/Structural/DataMapper/Tests/DataMapperTest.php @@ -2,11 +2,11 @@ namespace DesignPatterns\Structural\DataMapper\Tests; -use DesignPatterns\Structural\DataMapper\UserMapper; use DesignPatterns\Structural\DataMapper\User; +use DesignPatterns\Structural\DataMapper\UserMapper; /** - * UserMapperTest tests the datamapper pattern + * UserMapperTest tests the datamapper pattern. */ class DataMapperTest extends \PHPUnit_Framework_TestCase { @@ -66,9 +66,9 @@ class DataMapperTest extends \PHPUnit_Framework_TestCase public function testRestoreOne(User $existing) { $row = array( - 'userid' => 1, + 'userid' => 1, 'username' => 'Odysseus', - 'email' => 'Odysseus@ithaca.gr' + 'email' => 'Odysseus@ithaca.gr', ); $rows = new \ArrayIterator(array($row)); $this->dbal->expects($this->once()) diff --git a/Structural/DataMapper/User.php b/Structural/DataMapper/User.php index 78e60a8..8d8d2b2 100644 --- a/Structural/DataMapper/User.php +++ b/Structural/DataMapper/User.php @@ -3,12 +3,11 @@ namespace DesignPatterns\Structural\DataMapper; /** - * DataMapper pattern + * DataMapper pattern. * * This is our representation of a DataBase record in the memory (Entity) * * Validation would also go in this object - * */ class User { diff --git a/Structural/DataMapper/UserMapper.php b/Structural/DataMapper/UserMapper.php index 0ee5352..f147063 100644 --- a/Structural/DataMapper/UserMapper.php +++ b/Structural/DataMapper/UserMapper.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Structural\DataMapper; /** - * class UserMapper + * class UserMapper. */ class UserMapper { @@ -21,19 +21,19 @@ class UserMapper } /** - * saves a user object from memory to Database + * saves a user object from memory to Database. * * @param User $user * - * @return boolean + * @return bool */ public function save(User $user) { /* $data keys should correspond to valid Table columns on the Database */ $data = array( - 'userid' => $user->getUserId(), + 'userid' => $user->getUserId(), 'username' => $user->getUsername(), - 'email' => $user->getEmail(), + 'email' => $user->getEmail(), ); /* if no ID specified create new user else update the one in the Database */ @@ -51,11 +51,12 @@ class UserMapper /** * finds a user from Database based on ID and returns a User object located - * in memory + * in memory. * * @param int $id * * @throws \InvalidArgumentException + * * @return User */ public function findById($id) @@ -72,14 +73,14 @@ class UserMapper /** * fetches an array from Database and returns an array of User objects - * located in memory + * located in memory. * * @return array */ public function findAll() { $resultSet = $this->adapter->findAll(); - $entries = array(); + $entries = array(); foreach ($resultSet as $row) { $entries[] = $this->mapObject($row); @@ -89,7 +90,7 @@ class UserMapper } /** - * Maps a table row to an object + * Maps a table row to an object. * * @param array $row * diff --git a/Structural/Decorator/Decorator.php b/Structural/Decorator/Decorator.php index 182c07a..0b8fde3 100644 --- a/Structural/Decorator/Decorator.php +++ b/Structural/Decorator/Decorator.php @@ -9,7 +9,7 @@ namespace DesignPatterns\Structural\Decorator; */ /** - * class Decorator + * class Decorator. */ abstract class Decorator implements RendererInterface { diff --git a/Structural/Decorator/RenderInJson.php b/Structural/Decorator/RenderInJson.php index ebcc577..71943bd 100644 --- a/Structural/Decorator/RenderInJson.php +++ b/Structural/Decorator/RenderInJson.php @@ -3,12 +3,12 @@ namespace DesignPatterns\Structural\Decorator; /** - * Class RenderInJson + * Class RenderInJson. */ class RenderInJson extends Decorator { /** - * render data as JSON + * render data as JSON. * * @return mixed|string */ diff --git a/Structural/Decorator/RenderInXml.php b/Structural/Decorator/RenderInXml.php index f8e92a0..2eab7ca 100644 --- a/Structural/Decorator/RenderInXml.php +++ b/Structural/Decorator/RenderInXml.php @@ -3,12 +3,12 @@ namespace DesignPatterns\Structural\Decorator; /** - * Class RenderInXml + * Class RenderInXml. */ class RenderInXml extends Decorator { /** - * render data as XML + * render data as XML. * * @return mixed|string */ diff --git a/Structural/Decorator/RendererInterface.php b/Structural/Decorator/RendererInterface.php index 2957970..92b00ef 100644 --- a/Structural/Decorator/RendererInterface.php +++ b/Structural/Decorator/RendererInterface.php @@ -3,12 +3,12 @@ namespace DesignPatterns\Structural\Decorator; /** - * Class RendererInterface + * Class RendererInterface. */ interface RendererInterface { /** - * render data + * render data. * * @return mixed */ diff --git a/Structural/Decorator/Tests/DecoratorTest.php b/Structural/Decorator/Tests/DecoratorTest.php index c50181f..689caf2 100644 --- a/Structural/Decorator/Tests/DecoratorTest.php +++ b/Structural/Decorator/Tests/DecoratorTest.php @@ -5,11 +5,10 @@ namespace DesignPatterns\Structural\Decorator\Tests; use DesignPatterns\Structural\Decorator; /** - * DecoratorTest tests the decorator pattern + * DecoratorTest tests the decorator pattern. */ class DecoratorTest extends \PHPUnit_Framework_TestCase { - protected $service; protected function setUp() @@ -35,7 +34,7 @@ class DecoratorTest extends \PHPUnit_Framework_TestCase } /** - * The first key-point of this pattern : + * The first key-point of this pattern :. */ public function testDecoratorMustImplementsRenderer() { @@ -45,7 +44,7 @@ class DecoratorTest extends \PHPUnit_Framework_TestCase } /** - * Second key-point of this pattern : the decorator is type-hinted + * Second key-point of this pattern : the decorator is type-hinted. * * @expectedException \PHPUnit_Framework_Error */ @@ -59,7 +58,7 @@ class DecoratorTest extends \PHPUnit_Framework_TestCase } /** - * Second key-point of this pattern : the decorator is type-hinted + * Second key-point of this pattern : the decorator is type-hinted. * * @requires PHP 7 * @expectedException TypeError @@ -70,7 +69,7 @@ class DecoratorTest extends \PHPUnit_Framework_TestCase } /** - * The decorator implements and wraps the same interface + * The decorator implements and wraps the same interface. */ public function testDecoratorOnlyAcceptRenderer() { diff --git a/Structural/Decorator/Webservice.php b/Structural/Decorator/Webservice.php index e6bf306..e2bcc69 100644 --- a/Structural/Decorator/Webservice.php +++ b/Structural/Decorator/Webservice.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Structural\Decorator; /** - * Class Webservice + * Class Webservice. */ class Webservice implements RendererInterface { diff --git a/Structural/DependencyInjection/AbstractConfig.php b/Structural/DependencyInjection/AbstractConfig.php index 85e5245..f2da4dc 100644 --- a/Structural/DependencyInjection/AbstractConfig.php +++ b/Structural/DependencyInjection/AbstractConfig.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Structural\DependencyInjection; /** - * class AbstractConfig + * class AbstractConfig. */ abstract class AbstractConfig { diff --git a/Structural/DependencyInjection/ArrayConfig.php b/Structural/DependencyInjection/ArrayConfig.php index 91bca33..f26c089 100644 --- a/Structural/DependencyInjection/ArrayConfig.php +++ b/Structural/DependencyInjection/ArrayConfig.php @@ -3,17 +3,18 @@ namespace DesignPatterns\Structural\DependencyInjection; /** - * class ArrayConfig + * class ArrayConfig. * * uses array as data source */ class ArrayConfig extends AbstractConfig implements Parameters { /** - * Get parameter + * Get parameter. * * @param string|int $key - * @param null $default + * @param null $default + * * @return mixed */ public function get($key, $default = null) @@ -21,14 +22,15 @@ class ArrayConfig extends AbstractConfig implements Parameters if (isset($this->storage[$key])) { return $this->storage[$key]; } + return $default; } /** - * Set parameter + * Set parameter. * * @param string|int $key - * @param mixed $value + * @param mixed $value */ public function set($key, $value) { diff --git a/Structural/DependencyInjection/Connection.php b/Structural/DependencyInjection/Connection.php index 9e131c2..d389089 100644 --- a/Structural/DependencyInjection/Connection.php +++ b/Structural/DependencyInjection/Connection.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Structural\DependencyInjection; /** - * Class Connection + * Class Connection. */ class Connection { @@ -26,7 +26,7 @@ class Connection } /** - * connection using the injected config + * connection using the injected config. */ public function connect() { @@ -42,6 +42,7 @@ class Connection * * @return string */ + public function getHost() { return $this->host; diff --git a/Structural/DependencyInjection/Parameters.php b/Structural/DependencyInjection/Parameters.php index dabe895..c49f4c7 100644 --- a/Structural/DependencyInjection/Parameters.php +++ b/Structural/DependencyInjection/Parameters.php @@ -3,12 +3,12 @@ namespace DesignPatterns\Structural\DependencyInjection; /** - * Parameters interface + * Parameters interface. */ interface Parameters { /** - * Get parameter + * Get parameter. * * @param string|int $key * @@ -17,7 +17,7 @@ interface Parameters public function get($key); /** - * Set parameter + * Set parameter. * * @param string|int $key * @param mixed $value diff --git a/Structural/Facade/BiosInterface.php b/Structural/Facade/BiosInterface.php index 869dcd9..823af04 100644 --- a/Structural/Facade/BiosInterface.php +++ b/Structural/Facade/BiosInterface.php @@ -3,29 +3,29 @@ namespace DesignPatterns\Structural\Facade; /** - * Class BiosInterface + * Class BiosInterface. */ interface BiosInterface { /** - * execute the BIOS + * execute the BIOS. */ public function execute(); /** - * wait for halt + * wait for halt. */ public function waitForKeyPress(); /** - * launches the OS + * launches the OS. * * @param OsInterface $os */ public function launch(OsInterface $os); /** - * power down BIOS + * power down BIOS. */ public function powerDown(); } diff --git a/Structural/Facade/Facade.php b/Structural/Facade/Facade.php index c0048b4..50c665d 100644 --- a/Structural/Facade/Facade.php +++ b/Structural/Facade/Facade.php @@ -3,7 +3,6 @@ namespace DesignPatterns\Structural\Facade; /** - * * */ class Facade @@ -20,7 +19,7 @@ class Facade /** * This is the perfect time to use a dependency injection container - * to create an instance of this class + * to create an instance of this class. * * @param BiosInterface $bios * @param OsInterface $os @@ -32,7 +31,7 @@ class Facade } /** - * turn on the system + * turn on the system. */ public function turnOn() { @@ -42,7 +41,7 @@ class Facade } /** - * turn off the system + * turn off the system. */ public function turnOff() { diff --git a/Structural/Facade/OsInterface.php b/Structural/Facade/OsInterface.php index 3b09eb1..8394fd4 100644 --- a/Structural/Facade/OsInterface.php +++ b/Structural/Facade/OsInterface.php @@ -3,12 +3,12 @@ namespace DesignPatterns\Structural\Facade; /** - * Class OsInterface + * Class OsInterface. */ interface OsInterface { /** - * halt the OS + * halt the OS. */ public function halt(); } diff --git a/Structural/Facade/Tests/FacadeTest.php b/Structural/Facade/Tests/FacadeTest.php index 18133e9..e6038a0 100644 --- a/Structural/Facade/Tests/FacadeTest.php +++ b/Structural/Facade/Tests/FacadeTest.php @@ -6,11 +6,10 @@ use DesignPatterns\Structural\Facade\Facade as Computer; use DesignPatterns\Structural\Facade\OsInterface; /** - * FacadeTest shows example of facades + * FacadeTest shows example of facades. */ class FacadeTest extends \PHPUnit_Framework_TestCase { - public function getComputer() { $bios = $this->getMockBuilder('DesignPatterns\Structural\Facade\BiosInterface') @@ -30,6 +29,7 @@ class FacadeTest extends \PHPUnit_Framework_TestCase ->will($this->returnValue('Linux')); $facade = new Computer($bios, $operatingSys); + return array(array($facade, $operatingSys)); } diff --git a/Structural/FluentInterface/Sql.php b/Structural/FluentInterface/Sql.php index 35af3ef..58ba491 100644 --- a/Structural/FluentInterface/Sql.php +++ b/Structural/FluentInterface/Sql.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Structural\FluentInterface; /** - * class SQL + * class SQL. */ class Sql { @@ -23,7 +23,7 @@ class Sql protected $where = array(); /** - * adds select fields + * adds select fields. * * @param array $fields * @@ -37,7 +37,7 @@ class Sql } /** - * adds a FROM clause + * adds a FROM clause. * * @param string $table * @param string $alias @@ -46,13 +46,13 @@ class Sql */ public function from($table, $alias) { - $this->from[] = $table . ' AS ' . $alias; + $this->from[] = $table.' AS '.$alias; return $this; } /** - * adds a WHERE condition + * adds a WHERE condition. * * @param string $condition * @@ -67,14 +67,14 @@ class Sql /** * Gets the query, just an example of building a query, - * no check on consistency + * no check on consistency. * * @return string */ public function getQuery() { - return 'SELECT ' . implode(',', $this->fields) - . ' FROM ' . implode(',', $this->from) - . ' WHERE ' . implode(' AND ', $this->where); + return 'SELECT '.implode(',', $this->fields) + .' FROM '.implode(',', $this->from) + .' WHERE '.implode(' AND ', $this->where); } } diff --git a/Structural/FluentInterface/Tests/FluentInterfaceTest.php b/Structural/FluentInterface/Tests/FluentInterfaceTest.php index 98ea99d..ae4e656 100644 --- a/Structural/FluentInterface/Tests/FluentInterfaceTest.php +++ b/Structural/FluentInterface/Tests/FluentInterfaceTest.php @@ -5,11 +5,10 @@ namespace DesignPatterns\Structural\FluentInterface\Tests; use DesignPatterns\Structural\FluentInterface\Sql; /** - * FluentInterfaceTest tests the fluent interface SQL + * FluentInterfaceTest tests the fluent interface SQL. */ class FluentInterfaceTest extends \PHPUnit_Framework_TestCase { - public function testBuildSQL() { $instance = new Sql(); diff --git a/Structural/Proxy/Record.php b/Structural/Proxy/Record.php index 38481aa..7ae4a3c 100644 --- a/Structural/Proxy/Record.php +++ b/Structural/Proxy/Record.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Structural\Proxy; /** - * class Record + * class Record. */ class Record { @@ -21,7 +21,7 @@ class Record } /** - * magic setter + * magic setter. * * @param string $name * @param mixed $value @@ -34,7 +34,7 @@ class Record } /** - * magic getter + * magic getter. * * @param string $name * @@ -45,7 +45,7 @@ class Record if (array_key_exists($name, $this->data)) { return $this->data[(string) $name]; } else { - return null; + return; } } } diff --git a/Structural/Proxy/RecordProxy.php b/Structural/Proxy/RecordProxy.php index 1f68cff..f8c78a8 100644 --- a/Structural/Proxy/RecordProxy.php +++ b/Structural/Proxy/RecordProxy.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Structural\Proxy; /** - * Class RecordProxy + * Class RecordProxy. */ class RecordProxy extends Record { @@ -35,7 +35,7 @@ class RecordProxy extends Record } /** - * magic setter + * magic setter. * * @param string $name * @param mixed $value diff --git a/Structural/Registry/Registry.php b/Structural/Registry/Registry.php index d1c6b13..e40d0c3 100644 --- a/Structural/Registry/Registry.php +++ b/Structural/Registry/Registry.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Structural\Registry; /** - * class Registry + * class Registry. */ abstract class Registry { @@ -15,12 +15,13 @@ abstract class Registry protected static $storedValues = array(); /** - * sets a value + * sets a value. * * @param string $key * @param mixed $value * * @static + * * @return void */ public static function set($key, $value) @@ -29,11 +30,12 @@ abstract class Registry } /** - * gets a value from the registry + * gets a value from the registry. * * @param string $key * * @static + * * @return mixed */ public static function get($key) diff --git a/Structural/Registry/Tests/RegistryTest.php b/Structural/Registry/Tests/RegistryTest.php index 64685d4..e889976 100644 --- a/Structural/Registry/Tests/RegistryTest.php +++ b/Structural/Registry/Tests/RegistryTest.php @@ -6,7 +6,6 @@ use DesignPatterns\Structural\Registry\Registry; class RegistryTest extends \PHPUnit_Framework_TestCase { - public function testSetAndGetLogger() { Registry::set(Registry::LOGGER, new \StdClass()); From e83e37cc1c1ce83e41aaba35499926cf46e9f863 Mon Sep 17 00:00:00 2001 From: Andrew Nester Date: Sat, 16 Jan 2016 16:29:07 +0300 Subject: [PATCH 112/127] 181 - Updated doc for Vehicle class in Builder pattern --- Creational/Builder/Parts/Vehicle.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Creational/Builder/Parts/Vehicle.php b/Creational/Builder/Parts/Vehicle.php index 487be57..18c47ba 100644 --- a/Creational/Builder/Parts/Vehicle.php +++ b/Creational/Builder/Parts/Vehicle.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Creational\Builder\Parts; /** - * VehicleInterface is a contract for a vehicle. + * Vehicle class is an abstraction for a vehicle. */ abstract class Vehicle { From dddfdf65fc55b06088c268c88384df41ccb63811 Mon Sep 17 00:00:00 2001 From: Andrew Nester Date: Sat, 16 Jan 2016 17:06:43 +0300 Subject: [PATCH 113/127] 88 - Added undo example for command pattern --- Behavioral/Command/AddMessageDateCommand.php | 46 +++++++++++++++++ Behavioral/Command/Receiver.php | 31 +++++++++++- Behavioral/Command/Tests/CommandTest.php | 2 +- .../Command/Tests/UndoableCommandTest.php | 49 +++++++++++++++++++ .../Command/UndoableCommandInterface.php | 15 ++++++ 5 files changed, 141 insertions(+), 2 deletions(-) create mode 100644 Behavioral/Command/AddMessageDateCommand.php create mode 100644 Behavioral/Command/Tests/UndoableCommandTest.php create mode 100644 Behavioral/Command/UndoableCommandInterface.php diff --git a/Behavioral/Command/AddMessageDateCommand.php b/Behavioral/Command/AddMessageDateCommand.php new file mode 100644 index 0000000..9543bda --- /dev/null +++ b/Behavioral/Command/AddMessageDateCommand.php @@ -0,0 +1,46 @@ +output = $console; + } + + /** + * Execute and make receiver to enable displaying messages date. + */ + public function execute() + { + // sometimes, there is no receiver and this is the command which + // does all the work + $this->output->enableDate(); + } + + /** + * Undo the command and make receiver to disable displaying messages date. + */ + public function undo() + { + // sometimes, there is no receiver and this is the command which + // does all the work + $this->output->disableDate(); + } +} diff --git a/Behavioral/Command/Receiver.php b/Behavioral/Command/Receiver.php index ccf910b..956ce74 100644 --- a/Behavioral/Command/Receiver.php +++ b/Behavioral/Command/Receiver.php @@ -7,11 +7,40 @@ namespace DesignPatterns\Behavioral\Command; */ class Receiver { + private $enableDate = false; + + private $output = array(); + /** * @param string $str */ public function write($str) { - echo $str; + if ($this->enableDate) { + $str .= ' ['.date('Y-m-d').']'; + } + + $this->output[] = $str; + } + + public function getOutput() + { + return implode("\n", $this->output); + } + + /** + * Enable receiver to display message date. + */ + public function enableDate() + { + $this->enableDate = true; + } + + /** + * Disable receiver to display message date. + */ + public function disableDate() + { + $this->enableDate = false; } } diff --git a/Behavioral/Command/Tests/CommandTest.php b/Behavioral/Command/Tests/CommandTest.php index 9d9aa51..3852495 100644 --- a/Behavioral/Command/Tests/CommandTest.php +++ b/Behavioral/Command/Tests/CommandTest.php @@ -30,7 +30,7 @@ class CommandTest extends \PHPUnit_Framework_TestCase public function testInvocation() { $this->invoker->setCommand(new HelloCommand($this->receiver)); - $this->expectOutputString('Hello World'); $this->invoker->run(); + $this->assertEquals($this->receiver->getOutput(), 'Hello World'); } } diff --git a/Behavioral/Command/Tests/UndoableCommandTest.php b/Behavioral/Command/Tests/UndoableCommandTest.php new file mode 100644 index 0000000..5302a7b --- /dev/null +++ b/Behavioral/Command/Tests/UndoableCommandTest.php @@ -0,0 +1,49 @@ +invoker = new Invoker(); + $this->receiver = new Receiver(); + } + + public function testInvocation() + { + $this->invoker->setCommand(new HelloCommand($this->receiver)); + $this->invoker->run(); + $this->assertEquals($this->receiver->getOutput(), 'Hello World'); + + $messageDateCommand = new AddMessageDateCommand($this->receiver); + $messageDateCommand->execute(); + + $this->invoker->run(); + $this->assertEquals($this->receiver->getOutput(), "Hello World\nHello World [".date('Y-m-d').']'); + + $messageDateCommand->undo(); + + $this->invoker->run(); + $this->assertEquals($this->receiver->getOutput(), "Hello World\nHello World [".date('Y-m-d')."]\nHello World"); + } +} diff --git a/Behavioral/Command/UndoableCommandInterface.php b/Behavioral/Command/UndoableCommandInterface.php new file mode 100644 index 0000000..0fd101c --- /dev/null +++ b/Behavioral/Command/UndoableCommandInterface.php @@ -0,0 +1,15 @@ + Date: Sat, 16 Jan 2016 17:20:13 +0300 Subject: [PATCH 114/127] 89 - ConcreteFactory changed to SimpleFactory --- Creational/SimpleFactory/README.rst | 8 ++++---- .../{ConcreteFactory.php => SimpleFactory.php} | 4 ++-- Creational/SimpleFactory/Tests/SimpleFactoryTest.php | 4 ++-- Creational/SimpleFactory/uml/SimpleFactory.uml | 4 ++-- Creational/SimpleFactory/uml/uml.svg | 4 ++-- locale/ca/LC_MESSAGES/Creational/SimpleFactory/README.po | 4 ++-- locale/es/LC_MESSAGES/Creational/SimpleFactory/README.po | 4 ++-- .../pt_BR/LC_MESSAGES/Creational/SimpleFactory/README.po | 4 ++-- locale/ru/LC_MESSAGES/Creational/SimpleFactory/README.po | 8 ++++---- .../zh_CN/LC_MESSAGES/Creational/SimpleFactory/README.po | 4 ++-- 10 files changed, 24 insertions(+), 24 deletions(-) rename Creational/SimpleFactory/{ConcreteFactory.php => SimpleFactory.php} (95%) diff --git a/Creational/SimpleFactory/README.rst b/Creational/SimpleFactory/README.rst index 0525667..8f6ce81 100644 --- a/Creational/SimpleFactory/README.rst +++ b/Creational/SimpleFactory/README.rst @@ -4,7 +4,7 @@ Simple Factory Purpose ------- -ConcreteFactory is a simple factory pattern. +SimpleFactory is a simple factory pattern. It differs from the static factory because it is NOT static and as you know: static => global => evil! @@ -24,9 +24,9 @@ Code You can also find these code on `GitHub`_ -ConcreteFactory.php +SimpleFactory.php -.. literalinclude:: ConcreteFactory.php +.. literalinclude:: SimpleFactory.php :language: php :linenos: @@ -53,7 +53,7 @@ Usage .. code:: php - $factory = new ConcreteFactory(); + $factory = new SimpleFactory(); $bicycle = $factory->createVehicle('bicycle'); $bicycle->driveTo('Paris'); diff --git a/Creational/SimpleFactory/ConcreteFactory.php b/Creational/SimpleFactory/SimpleFactory.php similarity index 95% rename from Creational/SimpleFactory/ConcreteFactory.php rename to Creational/SimpleFactory/SimpleFactory.php index 5f4cd2d..7de17a1 100644 --- a/Creational/SimpleFactory/ConcreteFactory.php +++ b/Creational/SimpleFactory/SimpleFactory.php @@ -3,9 +3,9 @@ namespace DesignPatterns\Creational\SimpleFactory; /** - * class ConcreteFactory. + * class SimpleFactory. */ -class ConcreteFactory +class SimpleFactory { /** * @var array diff --git a/Creational/SimpleFactory/Tests/SimpleFactoryTest.php b/Creational/SimpleFactory/Tests/SimpleFactoryTest.php index c913d96..c2f5379 100644 --- a/Creational/SimpleFactory/Tests/SimpleFactoryTest.php +++ b/Creational/SimpleFactory/Tests/SimpleFactoryTest.php @@ -2,7 +2,7 @@ namespace DesignPatterns\Creational\SimpleFactory\Tests; -use DesignPatterns\Creational\SimpleFactory\ConcreteFactory; +use DesignPatterns\Creational\SimpleFactory\SimpleFactory; /** * SimpleFactoryTest tests the Simple Factory pattern. @@ -13,7 +13,7 @@ class SimpleFactoryTest extends \PHPUnit_Framework_TestCase protected function setUp() { - $this->factory = new ConcreteFactory(); + $this->factory = new SimpleFactory(); } public function getType() diff --git a/Creational/SimpleFactory/uml/SimpleFactory.uml b/Creational/SimpleFactory/uml/SimpleFactory.uml index f51ce6c..5a586a5 100644 --- a/Creational/SimpleFactory/uml/SimpleFactory.uml +++ b/Creational/SimpleFactory/uml/SimpleFactory.uml @@ -1,10 +1,10 @@ PHP - \DesignPatterns\Creational\SimpleFactory\ConcreteFactory + \DesignPatterns\Creational\SimpleFactory\SimpleFactory \DesignPatterns\Creational\SimpleFactory\Scooter - \DesignPatterns\Creational\SimpleFactory\ConcreteFactory + \DesignPatterns\Creational\SimpleFactory\SimpleFactory \DesignPatterns\Creational\SimpleFactory\VehicleInterface \DesignPatterns\Creational\SimpleFactory\Bicycle diff --git a/Creational/SimpleFactory/uml/uml.svg b/Creational/SimpleFactory/uml/uml.svg index 7c966c2..7da8077 100644 --- a/Creational/SimpleFactory/uml/uml.svg +++ b/Creational/SimpleFactory/uml/uml.svg @@ -201,10 +201,10 @@ - ConcreteFactory + SimpleFactory - ConcreteFactory + SimpleFactory diff --git a/locale/ca/LC_MESSAGES/Creational/SimpleFactory/README.po b/locale/ca/LC_MESSAGES/Creational/SimpleFactory/README.po index d011ad6..74e85d4 100644 --- a/locale/ca/LC_MESSAGES/Creational/SimpleFactory/README.po +++ b/locale/ca/LC_MESSAGES/Creational/SimpleFactory/README.po @@ -20,7 +20,7 @@ msgid "Purpose" msgstr "" #: ../../Creational/SimpleFactory/README.rst:7 -msgid "ConcreteFactory is a simple factory pattern." +msgid "SimpleFactory is a simple factory pattern." msgstr "" #: ../../Creational/SimpleFactory/README.rst:9 @@ -48,7 +48,7 @@ msgid "You can also find these code on `GitHub`_" msgstr "" #: ../../Creational/SimpleFactory/README.rst:27 -msgid "ConcreteFactory.php" +msgid "SimpleFactory.php" msgstr "" #: ../../Creational/SimpleFactory/README.rst:33 diff --git a/locale/es/LC_MESSAGES/Creational/SimpleFactory/README.po b/locale/es/LC_MESSAGES/Creational/SimpleFactory/README.po index a56e3b4..0b517cd 100644 --- a/locale/es/LC_MESSAGES/Creational/SimpleFactory/README.po +++ b/locale/es/LC_MESSAGES/Creational/SimpleFactory/README.po @@ -20,7 +20,7 @@ msgid "Purpose" msgstr "" #: ../../Creational/SimpleFactory/README.rst:7 -msgid "ConcreteFactory is a simple factory pattern." +msgid "SimpleFactory is a simple factory pattern." msgstr "" #: ../../Creational/SimpleFactory/README.rst:9 @@ -48,7 +48,7 @@ msgid "You can also find these code on `GitHub`_" msgstr "" #: ../../Creational/SimpleFactory/README.rst:27 -msgid "ConcreteFactory.php" +msgid "SimpleFactory.php" msgstr "" #: ../../Creational/SimpleFactory/README.rst:33 diff --git a/locale/pt_BR/LC_MESSAGES/Creational/SimpleFactory/README.po b/locale/pt_BR/LC_MESSAGES/Creational/SimpleFactory/README.po index d011ad6..74e85d4 100644 --- a/locale/pt_BR/LC_MESSAGES/Creational/SimpleFactory/README.po +++ b/locale/pt_BR/LC_MESSAGES/Creational/SimpleFactory/README.po @@ -20,7 +20,7 @@ msgid "Purpose" msgstr "" #: ../../Creational/SimpleFactory/README.rst:7 -msgid "ConcreteFactory is a simple factory pattern." +msgid "SimpleFactory is a simple factory pattern." msgstr "" #: ../../Creational/SimpleFactory/README.rst:9 @@ -48,7 +48,7 @@ msgid "You can also find these code on `GitHub`_" msgstr "" #: ../../Creational/SimpleFactory/README.rst:27 -msgid "ConcreteFactory.php" +msgid "SimpleFactory.php" msgstr "" #: ../../Creational/SimpleFactory/README.rst:33 diff --git a/locale/ru/LC_MESSAGES/Creational/SimpleFactory/README.po b/locale/ru/LC_MESSAGES/Creational/SimpleFactory/README.po index fdec3c4..4d50b56 100644 --- a/locale/ru/LC_MESSAGES/Creational/SimpleFactory/README.po +++ b/locale/ru/LC_MESSAGES/Creational/SimpleFactory/README.po @@ -20,8 +20,8 @@ msgid "Purpose" msgstr "Назначение" #: ../../Creational/SimpleFactory/README.rst:7 -msgid "ConcreteFactory is a simple factory pattern." -msgstr "ConcreteFactory в примере ниже, это паттерн «Простая Фабрика»." +msgid "SimpleFactory is a simple factory pattern." +msgstr "SimpleFactory в примере ниже, это паттерн «Простая Фабрика»." #: ../../Creational/SimpleFactory/README.rst:9 msgid "" @@ -53,8 +53,8 @@ msgid "You can also find these code on `GitHub`_" msgstr "Вы можете найти этот код на `GitHub`_" #: ../../Creational/SimpleFactory/README.rst:27 -msgid "ConcreteFactory.php" -msgstr "ConcreteFactory.php" +msgid "SimpleFactory.php" +msgstr "SimpleFactory.php" #: ../../Creational/SimpleFactory/README.rst:33 msgid "VehicleInterface.php" diff --git a/locale/zh_CN/LC_MESSAGES/Creational/SimpleFactory/README.po b/locale/zh_CN/LC_MESSAGES/Creational/SimpleFactory/README.po index 56221d8..d8eb51c 100644 --- a/locale/zh_CN/LC_MESSAGES/Creational/SimpleFactory/README.po +++ b/locale/zh_CN/LC_MESSAGES/Creational/SimpleFactory/README.po @@ -20,7 +20,7 @@ msgid "Purpose" msgstr "目的" #: ../../Creational/SimpleFactory/README.rst:7 -msgid "ConcreteFactory is a simple factory pattern." +msgid "SimpleFactory is a simple factory pattern." msgstr "简单的创建对象型工厂模式" #: ../../Creational/SimpleFactory/README.rst:9 @@ -52,7 +52,7 @@ msgid "You can also find these code on `GitHub`_" msgstr "你可以在 `GitHub`_ 上找到这些代码" #: ../../Creational/SimpleFactory/README.rst:27 -msgid "ConcreteFactory.php" +msgid "SimpleFactory.php" msgstr "" #: ../../Creational/SimpleFactory/README.rst:33 From 8a9872a6f5ce1f972bde719d1de85d95054c65db Mon Sep 17 00:00:00 2001 From: Ihor Burlachenko Date: Thu, 21 Jan 2016 22:46:28 +0100 Subject: [PATCH 115/127] Extended UndoableCommandInterface from CommandInterface --- Behavioral/Command/AddMessageDateCommand.php | 2 +- Behavioral/Command/UndoableCommandInterface.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Behavioral/Command/AddMessageDateCommand.php b/Behavioral/Command/AddMessageDateCommand.php index 9543bda..11bb9af 100644 --- a/Behavioral/Command/AddMessageDateCommand.php +++ b/Behavioral/Command/AddMessageDateCommand.php @@ -6,7 +6,7 @@ namespace DesignPatterns\Behavioral\Command; * This concrete command tweaks receiver to add current date to messages * invoker just knows that it can call "execute". */ -class AddMessageDateCommand implements CommandInterface, UndoableCommandInterface +class AddMessageDateCommand implements UndoableCommandInterface { /** * @var Receiver diff --git a/Behavioral/Command/UndoableCommandInterface.php b/Behavioral/Command/UndoableCommandInterface.php index 0fd101c..f9234ab 100644 --- a/Behavioral/Command/UndoableCommandInterface.php +++ b/Behavioral/Command/UndoableCommandInterface.php @@ -5,7 +5,7 @@ namespace DesignPatterns\Behavioral\Command; /** * Interface UndoableCommandInterface. */ -interface UndoableCommandInterface +interface UndoableCommandInterface extends CommandInterface { /** * This method is used to undo change made by command execution From d37937488258803f73c87f3e13cf046d15917c84 Mon Sep 17 00:00:00 2001 From: fitzel Date: Mon, 25 Jan 2016 12:55:19 +0100 Subject: [PATCH 116/127] Update README.rst --- Behavioral/Mediator/README.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Behavioral/Mediator/README.rst b/Behavioral/Mediator/README.rst index 1a596d7..bc9485a 100644 --- a/Behavioral/Mediator/README.rst +++ b/Behavioral/Mediator/README.rst @@ -4,8 +4,8 @@ Purpose ------- -This pattern provides an easy to decouple many components working -together. It is a good alternative over Observer IF you have a "central +This pattern provides an easy way to decouple many components working +together. It is a good alternative to Observer IF you have a "central intelligence", like a controller (but not in the sense of the MVC). All components (called Colleague) are only coupled to the @@ -70,4 +70,4 @@ Tests/MediatorTest.php :linenos: .. _`GitHub`: https://github.com/domnikl/DesignPatternsPHP/tree/master/Behavioral/Mediator -.. __: http://en.wikipedia.org/wiki/Mediator_pattern \ No newline at end of file +.. __: http://en.wikipedia.org/wiki/Mediator_pattern From f5f192a61693d58f05d24d2f4134907471ef6074 Mon Sep 17 00:00:00 2001 From: Artem Ostretsov Date: Thu, 28 Jan 2016 09:53:00 +0300 Subject: [PATCH 117/127] Update RoleVisitorInterface.php --- Behavioral/Visitor/RoleVisitorInterface.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Behavioral/Visitor/RoleVisitorInterface.php b/Behavioral/Visitor/RoleVisitorInterface.php index 1a72d7e..e8ba0ec 100644 --- a/Behavioral/Visitor/RoleVisitorInterface.php +++ b/Behavioral/Visitor/RoleVisitorInterface.php @@ -7,7 +7,7 @@ namespace DesignPatterns\Behavioral\Visitor; * * The contract for the visitor. * - * Note 1 : in C++ or java, with method polymorphism based on type-hint, there are many + * Note 1 : in C++ or Java, with method polymorphism based on type-hint, there are many * methods visit() with different type for the 'role' parameter. * * Note 2 : the visitor must not choose itself which method to From 3f1bd03aa46aa0192cb135571d2787fcfbf37f15 Mon Sep 17 00:00:00 2001 From: flobee Date: Sat, 6 Feb 2016 19:58:03 +0100 Subject: [PATCH 118/127] Some more tests, the constant confuses a bit --- Structural/Registry/Tests/RegistryTest.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Structural/Registry/Tests/RegistryTest.php b/Structural/Registry/Tests/RegistryTest.php index e889976..eee6f8d 100644 --- a/Structural/Registry/Tests/RegistryTest.php +++ b/Structural/Registry/Tests/RegistryTest.php @@ -6,6 +6,19 @@ use DesignPatterns\Structural\Registry\Registry; class RegistryTest extends \PHPUnit_Framework_TestCase { + public function testSimpleGetSet() + { + $key = 'myIdentifier'; + $object = new \StdClass(); + $object->props = array('a' => 1, 'b' => 2); + + Registry::set($key, $object); + $actual = Registry::get($key); + + $this->assertEquals($object, $actual); + $this->assertInstanceOf('StdClass', $actual); + } + public function testSetAndGetLogger() { Registry::set(Registry::LOGGER, new \StdClass()); From 1679894b1dc39a0523b1afe2a075b264001c6d25 Mon Sep 17 00:00:00 2001 From: Dominik Liebler Date: Sun, 14 Feb 2016 18:54:17 +0100 Subject: [PATCH 119/127] refactored Registry test: merged SimpleGetSet and SetAndGetLogger into one --- Structural/Registry/Tests/RegistryTest.php | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/Structural/Registry/Tests/RegistryTest.php b/Structural/Registry/Tests/RegistryTest.php index eee6f8d..636f09e 100644 --- a/Structural/Registry/Tests/RegistryTest.php +++ b/Structural/Registry/Tests/RegistryTest.php @@ -6,11 +6,10 @@ use DesignPatterns\Structural\Registry\Registry; class RegistryTest extends \PHPUnit_Framework_TestCase { - public function testSimpleGetSet() + public function testSetAndGetLogger() { - $key = 'myIdentifier'; + $key = Registry::LOGGER; $object = new \StdClass(); - $object->props = array('a' => 1, 'b' => 2); Registry::set($key, $object); $actual = Registry::get($key); @@ -18,12 +17,4 @@ class RegistryTest extends \PHPUnit_Framework_TestCase $this->assertEquals($object, $actual); $this->assertInstanceOf('StdClass', $actual); } - - public function testSetAndGetLogger() - { - Registry::set(Registry::LOGGER, new \StdClass()); - - $logger = Registry::get(Registry::LOGGER); - $this->assertInstanceOf('StdClass', $logger); - } } From eef2b2944eced2f54466f1163bf84017e11a0979 Mon Sep 17 00:00:00 2001 From: Dominik Liebler Date: Sun, 14 Feb 2016 18:57:02 +0100 Subject: [PATCH 120/127] fixed coding style issues --- Structural/Registry/Tests/RegistryTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Structural/Registry/Tests/RegistryTest.php b/Structural/Registry/Tests/RegistryTest.php index 636f09e..9561abe 100644 --- a/Structural/Registry/Tests/RegistryTest.php +++ b/Structural/Registry/Tests/RegistryTest.php @@ -10,10 +10,10 @@ class RegistryTest extends \PHPUnit_Framework_TestCase { $key = Registry::LOGGER; $object = new \StdClass(); - + Registry::set($key, $object); $actual = Registry::get($key); - + $this->assertEquals($object, $actual); $this->assertInstanceOf('StdClass', $actual); } From 1120fab17dbc5573f12cb259768a9aa2d7ab0a1e Mon Sep 17 00:00:00 2001 From: Alex Nastase Date: Mon, 7 Mar 2016 21:37:33 +0200 Subject: [PATCH 121/127] Comment updates in AbstractFactory Fixed minor typos and punctuation in comments. --- Creational/AbstractFactory/AbstractFactory.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Creational/AbstractFactory/AbstractFactory.php b/Creational/AbstractFactory/AbstractFactory.php index 6529ff6..fd69448 100644 --- a/Creational/AbstractFactory/AbstractFactory.php +++ b/Creational/AbstractFactory/AbstractFactory.php @@ -11,11 +11,11 @@ namespace DesignPatterns\Creational\AbstractFactory; * it is the concrete subclass which creates concrete components. * * In this case, the abstract factory is a contract for creating some components - * for the web. There are two components : Text and Picture. There is two ways + * for the web. There are two components : Text and Picture. There are two ways * of rendering : HTML or JSON. * - * Therefore 4 concretes classes, but the client just need to know this contract - * to build a correct http response (for a html page or for an ajax request) + * Therefore 4 concrete classes, but the client just needs to know this contract + * to build a correct HTTP response (for a HTML page or for an AJAX request). */ abstract class AbstractFactory { From 0e358b79d262eaf53cdcab64526e38456e62a319 Mon Sep 17 00:00:00 2001 From: Petr Jurasek Date: Mon, 21 Mar 2016 17:03:04 +0100 Subject: [PATCH 122/127] Typo Typo update --- Structural/Facade/BiosInterface.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Structural/Facade/BiosInterface.php b/Structural/Facade/BiosInterface.php index 823af04..2655e6f 100644 --- a/Structural/Facade/BiosInterface.php +++ b/Structural/Facade/BiosInterface.php @@ -3,29 +3,29 @@ namespace DesignPatterns\Structural\Facade; /** - * Class BiosInterface. + * Interface BiosInterface */ interface BiosInterface { /** - * execute the BIOS. + * execute the BIOS */ public function execute(); /** - * wait for halt. + * wait for halt */ public function waitForKeyPress(); /** - * launches the OS. + * launches the OS * * @param OsInterface $os */ public function launch(OsInterface $os); /** - * power down BIOS. + * power down BIOS */ public function powerDown(); } From 00c3903b2e88143357070665edaaa3cc11121025 Mon Sep 17 00:00:00 2001 From: Petr Jurasek Date: Thu, 24 Mar 2016 09:45:55 +0100 Subject: [PATCH 123/127] Capitalize letters and add dots --- Structural/Facade/BiosInterface.php | 10 +++++----- Structural/Facade/Facade.php | 6 +++--- Structural/Facade/OsInterface.php | 4 ++-- Structural/Facade/Tests/FacadeTest.php | 2 ++ 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/Structural/Facade/BiosInterface.php b/Structural/Facade/BiosInterface.php index 2655e6f..8f1aa01 100644 --- a/Structural/Facade/BiosInterface.php +++ b/Structural/Facade/BiosInterface.php @@ -3,29 +3,29 @@ namespace DesignPatterns\Structural\Facade; /** - * Interface BiosInterface + * Interface BiosInterface. */ interface BiosInterface { /** - * execute the BIOS + * Execute the BIOS. */ public function execute(); /** - * wait for halt + * Wait for halt. */ public function waitForKeyPress(); /** - * launches the OS + * Launches the OS. * * @param OsInterface $os */ public function launch(OsInterface $os); /** - * power down BIOS + * Power down BIOS. */ public function powerDown(); } diff --git a/Structural/Facade/Facade.php b/Structural/Facade/Facade.php index 50c665d..6c96fea 100644 --- a/Structural/Facade/Facade.php +++ b/Structural/Facade/Facade.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Structural\Facade; /** - * + * Class Facade */ class Facade { @@ -31,7 +31,7 @@ class Facade } /** - * turn on the system. + * Turn on the system. */ public function turnOn() { @@ -41,7 +41,7 @@ class Facade } /** - * turn off the system. + * Turn off the system. */ public function turnOff() { diff --git a/Structural/Facade/OsInterface.php b/Structural/Facade/OsInterface.php index 8394fd4..d8171e4 100644 --- a/Structural/Facade/OsInterface.php +++ b/Structural/Facade/OsInterface.php @@ -3,12 +3,12 @@ namespace DesignPatterns\Structural\Facade; /** - * Class OsInterface. + * Interface OsInterface. */ interface OsInterface { /** - * halt the OS. + * Halt the OS. */ public function halt(); } diff --git a/Structural/Facade/Tests/FacadeTest.php b/Structural/Facade/Tests/FacadeTest.php index e6038a0..0f1ea10 100644 --- a/Structural/Facade/Tests/FacadeTest.php +++ b/Structural/Facade/Tests/FacadeTest.php @@ -34,6 +34,8 @@ class FacadeTest extends \PHPUnit_Framework_TestCase } /** + * @param Computer $facade + * @param OsInterface $os * @dataProvider getComputer */ public function testComputerOn(Computer $facade, OsInterface $os) From 730316c11b2775c4c7f566b0431b9737bde4e32c Mon Sep 17 00:00:00 2001 From: Petr Jurasek Date: Thu, 24 Mar 2016 10:07:07 +0100 Subject: [PATCH 124/127] Add an dot --- Structural/Facade/Facade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Structural/Facade/Facade.php b/Structural/Facade/Facade.php index 6c96fea..43d1bcb 100644 --- a/Structural/Facade/Facade.php +++ b/Structural/Facade/Facade.php @@ -3,7 +3,7 @@ namespace DesignPatterns\Structural\Facade; /** - * Class Facade + * Class Facade. */ class Facade { From 4200d5a8741d37ba4817ae72d39980e9258d6237 Mon Sep 17 00:00:00 2001 From: Filis Date: Tue, 29 Mar 2016 18:38:17 +0200 Subject: [PATCH 125/127] copyright year? --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 440185f..06cf4ea 100755 --- a/README.md +++ b/README.md @@ -98,7 +98,7 @@ To establish a consistent code quality, please check your code using [PHP_CodeSn (The MIT License) -Copyright (c) 2014 Dominik Liebler and [contributors](https://github.com/domnikl/DesignPatternsPHP/graphs/contributors) +Copyright (c) 2016 Dominik Liebler and [contributors](https://github.com/domnikl/DesignPatternsPHP/graphs/contributors) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the From 32e0c656cd6d347e3140927841f8628f207ecc09 Mon Sep 17 00:00:00 2001 From: Filis Date: Wed, 30 Mar 2016 00:13:50 +0200 Subject: [PATCH 126/127] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 06cf4ea..37d79a6 100755 --- a/README.md +++ b/README.md @@ -98,7 +98,7 @@ To establish a consistent code quality, please check your code using [PHP_CodeSn (The MIT License) -Copyright (c) 2016 Dominik Liebler and [contributors](https://github.com/domnikl/DesignPatternsPHP/graphs/contributors) +Copyright (c) 2014 - 2016 Dominik Liebler and [contributors](https://github.com/domnikl/DesignPatternsPHP/graphs/contributors) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the From babb71702faa39168c876d5a9a7e754d571c2310 Mon Sep 17 00:00:00 2001 From: Filis Date: Wed, 30 Mar 2016 13:47:19 +0200 Subject: [PATCH 127/127] updated copyright year 2011 - 2016 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 37d79a6..a378e35 100755 --- a/README.md +++ b/README.md @@ -98,7 +98,7 @@ To establish a consistent code quality, please check your code using [PHP_CodeSn (The MIT License) -Copyright (c) 2014 - 2016 Dominik Liebler and [contributors](https://github.com/domnikl/DesignPatternsPHP/graphs/contributors) +Copyright (c) 2011 - 2016 Dominik Liebler and [contributors](https://github.com/domnikl/DesignPatternsPHP/graphs/contributors) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the