{"title":"設計思想","version":"1.10","locale":"ja","docname":"misc/design-philosophies","url":"/ja/1.10/misc/design-philosophies/","canonical":"https://djangodocs.dev/ja/1.10/misc/design-philosophies/","summary":"This document explains some of the fundamental philosophies Django's developers have used in creating the framework.","html":"<h1>設計思想<a class=\"heading-anchor\" href=\"#design-philosophies\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>This document explains some of the fundamental philosophies Django's developers\nhave used in creating the framework. Its goal is to explain the past and guide\nthe future.</p>\n<section id=\"overall\">\n<h2>概要<a class=\"heading-anchor\" href=\"#overall\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"loose-coupling\">\n<span id=\"id1\"></span><h3>疎結合<a class=\"heading-anchor\" href=\"#loose-coupling\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p id=\"index-0\">A fundamental goal of Django's stack is <a class=\"reference external\" href=\"http://c2.com/cgi/wiki?CouplingAndCohesion\">loose coupling and tight cohesion</a>.\nThe various layers of the framework shouldn't &quot;know&quot; about each other unless\nabsolutely necessary.</p>\n<p>For example, the template system knows nothing about Web requests, the database\nlayer knows nothing about data display and the view system doesn't care which\ntemplate system a programmer uses.</p>\n<p>Although Django comes with a full stack for convenience, the pieces of the\nstack are independent of another wherever possible.</p>\n</section>\n<section id=\"less-code\">\n<span id=\"id2\"></span><h3>短いコード<a class=\"heading-anchor\" href=\"#less-code\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django apps should use as little code as possible; they should lack boilerplate.\nDjango should take full advantage of Python's dynamic capabilities, such as\nintrospection.</p>\n</section>\n<section id=\"quick-development\">\n<span id=\"id3\"></span><h3>素早い開発<a class=\"heading-anchor\" href=\"#quick-development\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>The point of a Web framework in the 21st century is to make the tedious aspects\nof Web development fast. Django should allow for incredibly quick Web\ndevelopment.</p>\n</section>\n<section id=\"don-t-repeat-yourself-dry\">\n<span id=\"dry\"></span><h3>同じことを繰り返さない (DRY)<a class=\"heading-anchor\" href=\"#don-t-repeat-yourself-dry\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p id=\"index-1\">Every distinct concept and/or piece of data should live in one, and only one,\nplace. Redundancy is bad. Normalization is good.</p>\n<p>The framework, within reason, should deduce as much as possible from as little\nas possible.</p>\n<aside class=\"admonition admonition-seealso\" role=\"note\">\n<p class=\"admonition-title\">参考</p>\n<p>The <a class=\"reference external\" href=\"http://c2.com/cgi/wiki?DontRepeatYourself\">discussion of DRY on the Portland Pattern Repository</a></p>\n</aside>\n</section>\n<section id=\"explicit-is-better-than-implicit\">\n<span id=\"id5\"></span><h3>暗黙よりもはっきり示した方がいい (Explicit is better than implicit)<a class=\"heading-anchor\" href=\"#explicit-is-better-than-implicit\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>This is a core Python principle listed in <span class=\"target\" id=\"index-2\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-0020/\"><strong>PEP 20</strong></a>, and it means Django\nshouldn't do too much &quot;magic.&quot; Magic shouldn't happen unless there's a really\ngood reason for it. Magic is worth using only if it creates a huge convenience\nunattainable in other ways, and it isn't implemented in a way that confuses\ndevelopers who are trying to learn how to use the feature.</p>\n</section>\n<section id=\"consistency\">\n<span id=\"id6\"></span><h3>一貫性<a class=\"heading-anchor\" href=\"#consistency\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>フレームワークはあらゆるレベルで一貫性を持たなければなりません。一貫性は、低レベル (採用する Python のコーディングスタイル) から高レベル (Django の使い方) までのあらゆる点で保たれなければなりません。</p>\n</section>\n</section>\n<section id=\"models\">\n<h2>モデル<a class=\"heading-anchor\" href=\"#models\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"id7\">\n<h3>暗黙よりもはっきり示した方がいい (Explicit is better than implicit)<a class=\"heading-anchor\" href=\"#id7\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Fields shouldn't assume certain behaviors based solely on the name of the\nfield. This requires too much knowledge of the system and is prone to errors.\nInstead, behaviors should be based on keyword arguments and, in some cases, on\nthe type of the field.</p>\n</section>\n<section id=\"include-all-relevant-domain-logic\">\n<h3>Include all relevant domain logic<a class=\"heading-anchor\" href=\"#include-all-relevant-domain-logic\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Models should encapsulate every aspect of an &quot;object,&quot; following Martin\nFowler's <a class=\"reference external\" href=\"http://www.martinfowler.com/eaaCatalog/activeRecord.html\">Active Record</a> design pattern.</p>\n<p>This is why both the data represented by a model and information about\nit (its human-readable name, options like default ordering, etc.) are\ndefined in the model class; all the information needed to understand a\ngiven model should be stored <em>in</em> the model.</p>\n</section>\n</section>\n<section id=\"database-api\">\n<h2>データベース API<a class=\"heading-anchor\" href=\"#database-api\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>The core goals of the database API are:</p>\n<section id=\"sql-efficiency\">\n<h3>SQL の効率性<a class=\"heading-anchor\" href=\"#sql-efficiency\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>It should execute SQL statements as few times as possible, and it should\noptimize statements internally.</p>\n<p>This is why developers need to call <code class=\"docutils literal notranslate\">save()</code> explicitly, rather than the\nframework saving things behind the scenes silently.</p>\n<p>This is also why the <code class=\"docutils literal notranslate\">select_related()</code> <code class=\"docutils literal notranslate\">QuerySet</code> method exists. It's an\noptional performance booster for the common case of selecting &quot;every related\nobject.&quot;</p>\n</section>\n<section id=\"terse-powerful-syntax\">\n<h3>Terse, powerful syntax<a class=\"heading-anchor\" href=\"#terse-powerful-syntax\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>The database API should allow rich, expressive statements in as little syntax\nas possible. It should not rely on importing other modules or helper objects.</p>\n<p>Joins should be performed automatically, behind the scenes, when necessary.</p>\n<p>Every object should be able to access every related object, systemwide. This\naccess should work both ways.</p>\n</section>\n<section id=\"option-to-drop-into-raw-sql-easily-when-needed\">\n<h3>Option to drop into raw SQL easily, when needed<a class=\"heading-anchor\" href=\"#option-to-drop-into-raw-sql-easily-when-needed\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>The database API should realize it's a shortcut but not necessarily an\nend-all-be-all. The framework should make it easy to write custom SQL -- entire\nstatements, or just custom <code class=\"docutils literal notranslate\">WHERE</code> clauses as custom parameters to API calls.</p>\n</section>\n</section>\n<section id=\"url-design\">\n<h2>URL デザイン<a class=\"heading-anchor\" href=\"#url-design\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"id8\">\n<h3>疎結合<a class=\"heading-anchor\" href=\"#id8\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>URLs in a Django app should not be coupled to the underlying Python code. Tying\nURLs to Python function names is a Bad And Ugly Thing.</p>\n<p>Along these lines, the Django URL system should allow URLs for the same app to\nbe different in different contexts. For example, one site may put stories at\n<code class=\"docutils literal notranslate\">/stories/</code>, while another may use <code class=\"docutils literal notranslate\">/news/</code>.</p>\n</section>\n<section id=\"infinite-flexibility\">\n<h3>Infinite flexibility<a class=\"heading-anchor\" href=\"#infinite-flexibility\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>URLs should be as flexible as possible. Any conceivable URL design should be\nallowed.</p>\n</section>\n<section id=\"encourage-best-practices\">\n<h3>ベストプラクティスの推奨<a class=\"heading-anchor\" href=\"#encourage-best-practices\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>The framework should make it just as easy (or even easier) for a developer to\ndesign pretty URLs than ugly ones.</p>\n<p>File extensions in Web-page URLs should be avoided.</p>\n<p>Vignette-style commas in URLs deserve severe punishment.</p>\n</section>\n<section id=\"definitive-urls\">\n<span id=\"id9\"></span><h3>Definitive URLs<a class=\"heading-anchor\" href=\"#definitive-urls\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p id=\"index-3\">Technically, <code class=\"docutils literal notranslate\">foo.com/bar</code> and <code class=\"docutils literal notranslate\">foo.com/bar/</code> are two different URLs, and\nsearch-engine robots (and some Web traffic-analyzing tools) would treat them as\nseparate pages. Django should make an effort to &quot;normalize&quot; URLs so that\nsearch-engine robots don't get confused.</p>\n<p>This is the reasoning behind the <a class=\"reference internal\" href=\"/ja/1.10/ref/settings/#std-setting-APPEND_SLASH\"><code class=\"xref std std-setting docutils literal notranslate\">APPEND_SLASH</code></a> setting.</p>\n</section>\n</section>\n<section id=\"template-system\">\n<h2>テンプレートシステム<a class=\"heading-anchor\" href=\"#template-system\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"separate-logic-from-presentation\">\n<span id=\"separation-of-logic-and-presentation\"></span><h3>ロジックのプレゼンテーションからの分離<a class=\"heading-anchor\" href=\"#separate-logic-from-presentation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>We see a template system as a tool that controls presentation and\npresentation-related logic -- and that's it. The template system shouldn't\nsupport functionality that goes beyond this basic goal.</p>\n</section>\n<section id=\"discourage-redundancy\">\n<h3>冗長性の排除<a class=\"heading-anchor\" href=\"#discourage-redundancy\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>The majority of dynamic websites use some sort of common sitewide design --\na common header, footer, navigation bar, etc. The Django template system should\nmake it easy to store those elements in a single place, eliminating duplicate\ncode.</p>\n<p>これが <a class=\"reference internal\" href=\"/ja/1.10/ref/templates/language/#template-inheritance\"><span class=\"std std-ref\">テンプレートの継承</span></a> の背後にある思想です。</p>\n</section>\n<section id=\"be-decoupled-from-html\">\n<h3>HTML と疎結合であれ<a class=\"heading-anchor\" href=\"#be-decoupled-from-html\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>テンプレートシステムは、ただ単に HTML だけを出力するように設計されてはいません。他のテキストベースのフォーマットや、単純なプレインテキストも同じように上手く生成できるように作られています。</p>\n</section>\n<section id=\"xml-should-not-be-used-for-template-languages\">\n<h3>テンプレート言語として、XML を使うべきではない<a class=\"heading-anchor\" href=\"#xml-should-not-be-used-for-template-languages\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p id=\"index-4\">テンプレートをパースするのに XML エンジンを使ってしまうと、テンプレートの編集に全く新しいヒューマンエラーの世界を作り出してしまい、結果として、テンプレート処理に受け入れられないようなレベルの困難を生み出してしまうでしょう。</p>\n</section>\n<section id=\"assume-designer-competence\">\n<h3>Assume designer competence<a class=\"heading-anchor\" href=\"#assume-designer-competence\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>The template system shouldn't be designed so that templates necessarily are\ndisplayed nicely in WYSIWYG editors such as Dreamweaver. That is too severe of\na limitation and wouldn't allow the syntax to be as nice as it is. Django\nexpects template authors are comfortable editing HTML directly.</p>\n</section>\n<section id=\"treat-whitespace-obviously\">\n<h3>ホワイトスペースを明示的に扱う<a class=\"heading-anchor\" href=\"#treat-whitespace-obviously\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>テンプレートシステムは、ホワイトスペースに対して変わった処理を行うべきではありません。もしテンプレートにホワイトスペースが書かれていれば、他の文字と同じように扱って、それをそのまま表示するべきです。テンプレートタグの外に書かれたすべてのホワイトスペースは、そのまま表示するべきです。</p>\n</section>\n<section id=\"don-t-invent-a-programming-language\">\n<h3>新しいプログラミング言語を開発しない<a class=\"heading-anchor\" href=\"#don-t-invent-a-programming-language\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>私たちの目的は、新しいプログラミング言語を開発することではありません。本当の目的は、プログラミング言語が持つような機能を必要十分なだけ使えるようにすることです。たとえば、条件分岐やループといったもので、これらはプレゼンテーションに関連する決定を下すときに大切になります。 <a class=\"reference internal\" href=\"/ja/1.10/topics/templates/#template-language-intro\"><span class=\"std std-ref\">Django テンプレート言語 (Django Template Language; DTL)</span></a> は、複雑なロジックを使わずにこの目的を達成するために作られました。</p>\n<p>Django のテンプレートシステムは、テンプレートの書き手は <em>プログラマー</em> ではなく、主に <em>デザイナー</em> であることを念頭に置いています。そのため、Python の知識がまったくなくても書けるようになっています。</p>\n</section>\n<section id=\"safety-and-security\">\n<h3>安全性とセキュリティ<a class=\"heading-anchor\" href=\"#safety-and-security\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>テンプレートシステムは、コマンドの実行やデータベースレコードの削除を行うような、悪意のあるコードの挿入ができないようになっていなければなりません。</p>\n<p>これが、テンプレートシステムが任意の Python コードの実行を許さないようにできているもう一つの理由です。</p>\n</section>\n<section id=\"extensibility\">\n<h3>拡張性<a class=\"heading-anchor\" href=\"#extensibility\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>The template system should recognize that advanced template authors may want\nto extend its technology.</p>\n<p>これが、カスタムテンプレートタグとフィルタの背後にある思想です。</p>\n</section>\n</section>\n<section id=\"views\">\n<h2>ビュー<a class=\"heading-anchor\" href=\"#views\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"simplicity\">\n<h3>シンプルであること<a class=\"heading-anchor\" href=\"#simplicity\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>ビューは、Python の関数を書くのと同じくらい簡単に書けるべきです。開発者は、ふつうに関数を書くときと同じように、クラスからインスタンスを作ったりせずにビューが書けるべきです。</p>\n</section>\n<section id=\"use-request-objects\">\n<h3>request オブジェクトを使うこと<a class=\"heading-anchor\" href=\"#use-request-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Views should have access to a request object -- an object that stores metadata\nabout the current request. The object should be passed directly to a view\nfunction, rather than the view function having to access the request data from\na global variable. This makes it light, clean and easy to test views by passing\nin &quot;fake&quot; request objects.</p>\n</section>\n<section id=\"id10\">\n<h3>疎結合<a class=\"heading-anchor\" href=\"#id10\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>ビューは、開発者がどのテンプレートシステムを使用しているか意識せずに使えるべきです。もっと言えば、テンプレートシステム自体を使っているかどうかも気にせずに使えるようにするべきです。</p>\n</section>\n<section id=\"differentiate-between-get-and-post\">\n<h3>GET と POST を区別<a class=\"heading-anchor\" href=\"#differentiate-between-get-and-post\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>GET と POST は区別します。開発者は明示的に一方を他方と区別して明示的に使用するべきです。フレームワークは、GET と POST データを分かりやすく区別できるようにしなければなりません。</p>\n</section>\n</section>\n<section id=\"cache-framework\">\n<span id=\"cache-design-philosophy\"></span><h2>キャッシュフレームワーク<a class=\"heading-anchor\" href=\"#cache-framework\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django の <a class=\"reference internal\" href=\"/ja/1.10/topics/cache/\"><span class=\"doc\">キャッシュフレームワーク</span></a> の主な目的は次の点にあります。</p>\n<section id=\"id11\">\n<h3>短いコード<a class=\"heading-anchor\" href=\"#id11\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>キャッシュは可能な限り高速でなければならない。したがって、キャッシュバックエンドを包んでいるフレームワークのコード (特に <code class=\"docutils literal notranslate\">get()</code> 操作) はすべて、極限まで短くするべきである。</p>\n</section>\n<section id=\"id12\">\n<h3>一貫性<a class=\"heading-anchor\" href=\"#id12\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>キャッシュ API は、バックエントが違っていても一貫したインターフェイスを提供するべきである。</p>\n</section>\n<section id=\"id13\">\n<h3>拡張性<a class=\"heading-anchor\" href=\"#id13\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>キャッシュ API は、開発者のニーズにもとづいて、アプリケーションレベルで拡張可能であるべきである (例としては <a class=\"reference internal\" href=\"/ja/1.10/topics/cache/#cache-key-transformation\"><span class=\"std std-ref\">Cache key transformation</span></a> がある)。</p>\n</section>\n</section>","rootId":"design-philosophies","toc":[{"title":"概要","anchor":"overall","children":[{"title":"疎結合","anchor":"loose-coupling","children":[]},{"title":"短いコード","anchor":"less-code","children":[]},{"title":"素早い開発","anchor":"quick-development","children":[]},{"title":"同じことを繰り返さない (DRY)","anchor":"don-t-repeat-yourself-dry","children":[]},{"title":"暗黙よりもはっきり示した方がいい (Explicit is better than implicit)","anchor":"explicit-is-better-than-implicit","children":[]},{"title":"一貫性","anchor":"consistency","children":[]}]},{"title":"モデル","anchor":"models","children":[{"title":"暗黙よりもはっきり示した方がいい (Explicit is better than implicit)","anchor":"id7","children":[]},{"title":"Include all relevant domain logic","anchor":"include-all-relevant-domain-logic","children":[]}]},{"title":"データベース API","anchor":"database-api","children":[{"title":"SQL の効率性","anchor":"sql-efficiency","children":[]},{"title":"Terse, powerful syntax","anchor":"terse-powerful-syntax","children":[]},{"title":"Option to drop into raw SQL easily, when needed","anchor":"option-to-drop-into-raw-sql-easily-when-needed","children":[]}]},{"title":"URL デザイン","anchor":"url-design","children":[{"title":"疎結合","anchor":"id8","children":[]},{"title":"Infinite flexibility","anchor":"infinite-flexibility","children":[]},{"title":"ベストプラクティスの推奨","anchor":"encourage-best-practices","children":[]},{"title":"Definitive URLs","anchor":"definitive-urls","children":[]}]},{"title":"テンプレートシステム","anchor":"template-system","children":[{"title":"ロジックのプレゼンテーションからの分離","anchor":"separate-logic-from-presentation","children":[]},{"title":"冗長性の排除","anchor":"discourage-redundancy","children":[]},{"title":"HTML と疎結合であれ","anchor":"be-decoupled-from-html","children":[]},{"title":"テンプレート言語として、XML を使うべきではない","anchor":"xml-should-not-be-used-for-template-languages","children":[]},{"title":"Assume designer competence","anchor":"assume-designer-competence","children":[]},{"title":"ホワイトスペースを明示的に扱う","anchor":"treat-whitespace-obviously","children":[]},{"title":"新しいプログラミング言語を開発しない","anchor":"don-t-invent-a-programming-language","children":[]},{"title":"安全性とセキュリティ","anchor":"safety-and-security","children":[]},{"title":"拡張性","anchor":"extensibility","children":[]}]},{"title":"ビュー","anchor":"views","children":[{"title":"シンプルであること","anchor":"simplicity","children":[]},{"title":"request オブジェクトを使うこと","anchor":"use-request-objects","children":[]},{"title":"疎結合","anchor":"id10","children":[]},{"title":"GET と POST を区別","anchor":"differentiate-between-get-and-post","children":[]}]},{"title":"キャッシュフレームワーク","anchor":"cache-framework","children":[{"title":"短いコード","anchor":"id11","children":[]},{"title":"一貫性","anchor":"id12","children":[]},{"title":"拡張性","anchor":"id13","children":[]}]}],"breadcrumbs":[{"docname":"misc/index","title":"メタドキュメントとその他","url":"/ja/1.10/misc/"}],"prev":{"docname":"misc/api-stability","title":"API の安定性","url":"/ja/1.10/misc/api-stability/"},"next":{"docname":"misc/distributions","title":"サードパーティの Django ディストリビューション","url":"/ja/1.10/misc/distributions/"},"formats":{"html":"/ja/1.10/misc/design-philosophies/","markdown":"/ja/1.10/misc/design-philosophies.md","json":"/ja/1.10/misc/design-philosophies.json"},"source":"https://github.com/django/django/blob/stable/1.10.x/docs/misc/design-philosophies.txt","official":"https://docs.djangoproject.com/ja/1.10/misc/design-philosophies/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","fr","ja","id","pt-br","es","el","pl"]}