From 8c125fa5ad6f56d33dc03b3d7bbc6488f22c5119 Mon Sep 17 00:00:00 2001
From: OpenStack Proposal Bot <openstack-infra@lists.openstack.org>
Date: Sun, 12 May 2019 09:11:41 +0000
Subject: [PATCH] Imported Translations from Zanata

For more information about this automatic import see:
https://docs.openstack.org/i18n/latest/reviewing-translation-import.html

Change-Id: I887cb149d10d333eb06b3f821ec6223bc8c48d11
---
 .../locale/id/LC_MESSAGES/doc-contributor.po  | 1377 ++++++++++++++++-
 1 file changed, 1374 insertions(+), 3 deletions(-)

diff --git a/doc/source/locale/id/LC_MESSAGES/doc-contributor.po b/doc/source/locale/id/LC_MESSAGES/doc-contributor.po
index 30660cfed5..7f6643e242 100644
--- a/doc/source/locale/id/LC_MESSAGES/doc-contributor.po
+++ b/doc/source/locale/id/LC_MESSAGES/doc-contributor.po
@@ -2,13 +2,13 @@
 # suhartono <cloudsuhartono@gmail.com>, 2019. #zanata
 msgid ""
 msgstr ""
-"Project-Id-Version: horizon 15.1.0.dev79\n"
+"Project-Id-Version: horizon 15.1.0.dev84\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-05-08 05:54-0500\n"
+"POT-Creation-Date: 2019-05-11 04:24-0500\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"PO-Revision-Date: 2019-05-09 05:11+0000\n"
+"PO-Revision-Date: 2019-05-11 05:40+0000\n"
 "Last-Translator: suhartono <cloudsuhartono@gmail.com>\n"
 "Language-Team: Indonesian\n"
 "Language: id\n"
@@ -62,6 +62,24 @@ msgstr ""
 "dashboard``, atau patched ``local_settings.py`` default untuk menulis "
 "``SECRET_KEY`` di /var."
 
+msgid ":class:`~horizon.tables.Action`"
+msgstr ":class:`~horizon.tables.Action`"
+
+msgid ":class:`~horizon.tables.BatchAction`"
+msgstr ":class:`~horizon.tables.BatchAction`"
+
+msgid ":class:`~horizon.tables.DeleteAction`"
+msgstr ":class:`~horizon.tables.DeleteAction`"
+
+msgid ":class:`~horizon.tables.FilterAction`"
+msgstr ":class:`~horizon.tables.FilterAction`"
+
+msgid ":class:`~horizon.tables.FixedFilterAction`"
+msgstr ":class:`~horizon.tables.FixedFilterAction`"
+
+msgid ":class:`~horizon.tables.LinkAction`"
+msgstr ":class:`~horizon.tables.LinkAction`"
+
 msgid ""
 ":meth:`~horizon.tabs.Tab.get_context_data` method and the :meth:`~horizon."
 "tabs.Tab.get_template_name` method are called."
@@ -181,6 +199,24 @@ msgid "A class-based generic view to handle basic DataTable processing."
 msgstr ""
 "Tampilan generik berbasis kelas untuk menangani pemrosesan DataTable dasar."
 
+msgid ""
+"A common pitfall is to take a known test object, pass it through your code, "
+"and then verify the properties of that object on the output. This is all "
+"well and good, except if you're verifying properties that were untouched by "
+"your code. What you want to check are the pieces that were *changed*, "
+"*added*, or *removed*. Don't check the object's id attribute unless you have "
+"reason to suspect it's not the object you started with. But if you added a "
+"new attribute to it, be damn sure you verify that came out right."
+msgstr ""
+"Jebakan (pitfall) yang umum adalah mengambil objek uji yang diketahui, "
+"meneruskannya melalui kode Anda, dan kemudian memverifikasi properti objek "
+"itu pada output. Ini semua baik dan bagus, kecuali jika Anda memverifikasi "
+"properti yang tidak tersentuh oleh kode Anda. Yang ingin Anda periksa adalah "
+"bagian-bagian yang  *changed*, *added*, atau  *removed*.  Jangan periksa "
+"atribut id objek kecuali Anda memiliki alasan untuk curiga itu bukan objek "
+"yang Anda mulai. Tetapi jika Anda menambahkan atribut baru ke dalamnya, "
+"yakinlah Anda memverifikasi yang keluar benar."
+
 msgid "A container class which knows how to manage and render Tab objects."
 msgstr "Kelas kontainer yang tahu cara mengelola dan merender objek Tab."
 
@@ -199,6 +235,17 @@ msgstr ""
 "yang diberikan, untuk saat tabel tertentu membutuhkan styling khusus. "
 "Default: ``\"\"``."
 
+msgid ""
+"A dashboard class will usually contain a ``name`` attribute (the display "
+"name of the dashboard), a ``slug`` attribute (the internal name that could "
+"be referenced by other components), a list of panels, default panel, etc. We "
+"will cover how to add a panel in the next section."
+msgstr ""
+"Kelas dashboard biasanya akan berisi atribut ``name`` (nama tampilan "
+"dashboard), atribut ``slug`` (nama internal yang dapat dirujuk oleh komponen "
+"lain), daftar panel, panel default, dll. Kami akan membahas cara menambahkan "
+"panel di bagian selanjutnya."
+
 msgid ""
 "A descriptive name used for display purposes. Defaults to the value of "
 "``name`` with the first letter of each word capitalized."
@@ -262,6 +309,9 @@ msgstr ""
 "Diperlukan nama domain jika mengautentikasi dengan Keystone V3 yang "
 "menjalankan konfigurasi multi-domain."
 
+msgid "A few simple guidelines:"
+msgstr "Beberapa pedoman sederhana:"
+
 msgid ""
 "A field can only safely define one slug in its ``\"switch-on\"`` attribute. "
 "While switching on multiple fields is possible, the behavior is very hard to "
@@ -311,6 +361,21 @@ msgstr ""
 "Pandangan umum yang menangani seluk-beluk (intricacies) pemrosesan alur "
 "kerja."
 
+msgid ""
+"A good rule of thumb is to mock as close to the source as possible. If you "
+"have a function call that calls an external API in a view , mock out the "
+"external API, not the whole function. If you mock the whole function you've "
+"suddenly lost test coverage for an entire chunk of code *inside* your "
+"codebase. Cut the ties cleanly right where your system ends and the external "
+"world begins."
+msgstr ""
+"Aturan praktis yang baik adalah mock sedekat mungkin dengan sumbernya. Jika "
+"Anda memiliki panggilan fungsi yang memanggil API eksternal dalam tampilan,  "
+"mock out API eksternal, bukan seluruh fungsi. Jika Anda mock seluruh fungsi "
+"Anda tiba-tiba kehilangan cakupan tes untuk seluruh potongan kode *inside*  "
+"codebase Anda. Potong ikatan dengan benar di tempat sistem Anda berakhir dan "
+"dunia eksternal dimulai."
+
 msgid ""
 "A label of a menu button for ``table_actions_menu``. The default is \"Actions"
 "\" or \"More Actions\" depending on ``table_actions``."
@@ -944,9 +1009,21 @@ msgstr ""
 msgid "Adding a feature that was introduced in a microversion"
 msgstr "Menambahkan fitur yang diperkenalkan dalam  microversion"
 
+msgid "Adding actions to a table"
+msgstr "Menambahkan tindakan ke tabel"
+
 msgid "Adding new SCSS"
 msgstr "Menambahkan SCSS baru"
 
+msgid ""
+"Additionally, the displaying of the table is handled by a reusable template, "
+"``horizon/common/_detail_table.html``. Some simple pagination code was added "
+"to handle large instance lists."
+msgstr ""
+"Selain itu, tampilan tabel ditangani oleh templat yang dapat digunakan "
+"kembali, ``horizon/common/_detail_table.html``. Beberapa kode pagination "
+"sederhana ditambahkan untuk menangani daftar instance besar."
+
 msgid ""
 "Additionally, we follow `Django's style guide`_ for templates, views, and "
 "other miscellany."
@@ -987,6 +1064,13 @@ msgstr ""
 msgid "After You Write Your Patch"
 msgstr "Setelah Anda Menulis Patch Anda"
 
+msgid ""
+"After importing the proper package, the completed ``views.py`` file  now "
+"looks like the following::"
+msgstr ""
+"Setelah mengimpor paket yang tepat, file ``views.py`` yang telah selesai "
+"sekarang tampak seperti berikut::"
+
 msgid ""
 "After syncing policies from back-end services, you need to check what are "
 "changed. If a policy referred by horizon has been changed, you need to check "
@@ -1313,6 +1397,23 @@ msgstr ""
 msgid "As a project, Horizon adheres to code quality standards."
 msgstr "Sebagai sebuah proyek, Horizon mematuhi standar kualitas kode."
 
+msgid ""
+"As an example, we'll create a new ``My Dashboard`` dashboard with a ``My "
+"Panel`` panel that has an ``Instances Tab`` tab. The tab has a table which "
+"contains the data pulled by the Nova instances API."
+msgstr ""
+"Sebagai contoh, kami akan membuat dasbor ``My Dash`` baru dengan panel ``My "
+"Panel`` yang memiliki tab ``Tab Instances``. Tab memiliki tabel yang berisi "
+"data yang ditarik oleh Nova instances API."
+
+msgid ""
+"As described above, the ``mypanel`` directory under ``openstack_dashboard/"
+"dashboards/mydashboard`` should look like the following::"
+msgstr ""
+"Seperti dijelaskan di atas, direktori ``mypanel`` di bawah "
+"``openstack_dashboard/dashboards/mydashboard`` akan terlihat seperti "
+"berikut ::"
+
 msgid ""
 "As of Queens, the OpenStack community are in the process of `policy-in-code "
 "<https://governance.openstack.org/tc/goals/queens/policy-in-code.html>`__. "
@@ -1327,6 +1428,9 @@ msgstr ""
 msgid "As with websso, this is only supported in Keystone version 3."
 msgstr "Seperti halnya websso, ini hanya didukung di Keystone versi 3."
 
+msgid "Assertions and verification"
+msgstr "Penegasan dan verifikasi"
+
 msgid "Asserts no messages have been attached by the messages framework."
 msgstr "Menyatakan tidak ada pesan yang dilampirkan oleh kerangka pesan."
 
@@ -1903,6 +2007,9 @@ msgstr ""
 msgid "Can't test interactions with live external services."
 msgstr "Tidak dapat menguji interaksi dengan layanan eksternal langsung."
 
+msgid "Catches *many* bugs that unit and functional tests will not."
+msgstr "Menangkap *many* bug yang tidak akan diuji unit dan fungsional."
+
 msgid "Catches internal Horizon exception classes."
 msgstr "Menangkap kelas pengecualian Horizon internal."
 
@@ -2038,6 +2145,15 @@ msgstr "Fungsi umum untuk mendapatkan wilayah dari endpoint."
 msgid "Common function for setting the cookie in the response."
 msgstr "Fungsi umum untuk mengatur cookie dalam respons."
 
+msgid "Common pitfalls"
+msgstr "Perangkap umum"
+
+msgid "Compile the catalog"
+msgstr "Kompilasi katalog"
+
+msgid "Complex example of a workflow"
+msgstr "Contoh kompleks alur kerja"
+
 msgid "Component version"
 msgstr "Versi komponen"
 
@@ -2183,6 +2299,17 @@ msgstr ""
 msgid "Coverage Reports"
 msgstr "Coverage Reports (laporan liputan)"
 
+msgid "Coverage reports"
+msgstr "Laporan liputan"
+
+msgid ""
+"Create a ``tabs.py`` file under the ``mypanel`` directory. Let's make a tab "
+"group which has one tab. The completed code should look like the following::"
+msgstr ""
+"Buat file ``tabs.py`` di bawah direktori ``mypanel``. Mari kita membuat grup "
+"tab yang memiliki satu tab. Kode yang sudah selesai akan terlihat seperti "
+"berikut ::"
+
 msgid "Create a subclass of :class:`~horizon.tables.DataTable`."
 msgstr "Buat subkelas dari :class:`~horizon.tables.DataTable`."
 
@@ -2194,6 +2321,12 @@ msgid ""
 msgstr ""
 "Buat kelas inner ``Meta`` untuk memuat opsi-opsi khusus untuk tabel ini."
 
+msgid "Creating a dashboard"
+msgstr "Membuat dasbor"
+
+msgid "Creating a panel"
+msgstr "Membuat panel"
+
 msgid "Creating a table is fairly simple:"
 msgstr "Membuat tabel cukup sederhana:"
 
@@ -2270,6 +2403,9 @@ msgstr ""
 msgid "DataTables Topic Guide"
 msgstr "Panduan Topik DataTables"
 
+msgid "Debugging Unit Tests"
+msgstr "Tes Unit Debugging"
+
 msgid "Debugging with ``pdb`` becomes much simpler to interact with."
 msgstr "Debugging dengan ``pdb`` menjadi lebih mudah untuk berinteraksi."
 
@@ -2337,10 +2473,19 @@ msgstr ""
 msgid "Define columns on it using :class:`~horizon.tables.Column`."
 msgstr "Tentukan kolom di atasnya menggunakan :class:`~horizon.tables.Column`."
 
+msgid "Defining a dashboard"
+msgstr "Menentukan dasbor"
+
 msgid ""
 "Defining a form_field for each Column that we want to be in-line edited."
 msgstr "Menentukan form_field untuk setiap Column yang ingin diedit sebaris."
 
+msgid "Defining a panel"
+msgstr "Mendefinisikan panel"
+
+msgid "Defining a table"
+msgstr "Mendefinisikan tabel"
+
 msgid ""
 "Defining an ``get_data`` method in a class inherited from ``tables.Row``. "
 "This method takes care of fetching the row data. This class has to be then "
@@ -2350,6 +2495,9 @@ msgstr ""
 "Row``. Metode ini menangani pengambilan data baris. Kelas ini kemudian harus "
 "didefinisikan dalam tabel kelas Meta sebagai ``row_class = UpdateRow``."
 
+msgid "Defining tabs"
+msgstr "Menentukan tab"
+
 msgid ""
 "Dependency checks: XStatic checks that dependencies, such as fonts and "
 "JavaScript libs, are available in downstream distributions."
@@ -2357,6 +2505,13 @@ msgstr ""
 "Pemeriksaan dependensi: Pemeriksaan XStatic bahwa dependensi, seperti font "
 "dan lib JavaScript, tersedia di distribusi downstream."
 
+msgid ""
+"Designing your code with a functional testing perspective in mind helps keep "
+"a higher-level viewpoint in mind."
+msgstr ""
+"Merancang kode Anda dengan mempertimbangkan perspektif pengujian fungsional "
+"membantu menjaga sudut pandang tingkat yang lebih tinggi dalam pikiran."
+
 msgid "Determine if agiven filter field should be used as an API filter."
 msgstr ""
 "Tentukan apakah suatu field filter yang diberikan harus digunakan sebagai "
@@ -2402,6 +2557,13 @@ msgstr ""
 "Menentukan apakah alur kerja dapat diselesaikan oleh pengguna yang diberikan "
 "saat runtime berdasarkan pada semua informasi yang tersedia."
 
+msgid "Did I mention that setting it up is a pain?"
+msgstr "Apakah saya menyebutkan bahwa pengaturannya itu menyakitkan?"
+
+msgid "Difficult and time-consuming to create a repeatable test environment."
+msgstr ""
+"Sulit dan menyita waktu untuk menciptakan lingkungan pengujian yang berulang."
+
 msgid ""
 "Directives do not require the module name but are encouraged to begin with "
 "the ``hz`` prefix. For example: ::"
@@ -2489,6 +2651,23 @@ msgstr ""
 msgid "Does a panel have to be an app in ``INSTALLED_APPS``?"
 msgstr "Apakah panel harus menjadi aplikasi di ``INSTALLED_APPS``?"
 
+msgid ""
+"Doesn't offer any insight into the quality or status of the underlying code, "
+"only verifies that it works or it doesn't."
+msgstr ""
+"Tidak menawarkan wawasan apa pun tentang kualitas atau status kode yang "
+"mendasarinya, hanya memverifikasi bahwa kode itu berfungsi atau tidak."
+
+msgid "Doesn't rely on assumptions about the inputs and outputs."
+msgstr "Tidak mengandalkan asumsi tentang input dan output."
+
+msgid ""
+"Don't forget to remove any pseudo translated ``.pot`` or ``.po`` files. "
+"Those should **not** be submitted for review."
+msgstr ""
+"Jangan lupa untuk menghapus file pseudo yang diterjemahkan ``.pot`` atau ``."
+"po``. Itu **not**  harus diserahkan untuk ditinjau."
+
 msgid ""
 "Don't put API calls in context processors; they will be called once for each "
 "template/template fragment which takes context that is used to render the "
@@ -2586,6 +2765,9 @@ msgstr ""
 "disimpan pada permintaan untuk menentukan peran pengguna. Informasi ini "
 "diekstraksi dari bukti yang diterima dari Keystone ketika diautentikasi."
 
+msgid "Easy to be lax in writing them, or lazy in constructing them."
+msgstr "Mudah longgar dalam menulisnya, atau malas membangunnya."
+
 msgid "Editing Horizon's Source"
 msgstr "Mengedit Sumber Horizon"
 
@@ -2617,6 +2799,11 @@ msgstr ""
 "Pastikan informasi versi dalam file  `xstatic/pkg/<package name>/__init__."
 "py` adalah yang terbaru, terutama` BUILD`."
 
+msgid ""
+"Ensures that your code *always* meets the stated functional requirements."
+msgstr ""
+"Pastikan kode Anda *always*  memenuhi persyaratan fungsional yang dinyatakan."
+
 msgid ""
 "Ensuring the level of testing is adequate and remains relevant as features "
 "are added"
@@ -2641,6 +2828,9 @@ msgstr "Etiket"
 msgid "Evaluates whether this user has admin privileges."
 msgstr "Mengevaluasi apakah pengguna ini memiliki hak admin."
 
+msgid "Every bug fix should have a regression test. Period."
+msgstr "Setiap perbaikan bug harus memiliki tes regresi. Periode."
+
 msgid ""
 "Every distribution must comply with the Filesystem Hierarchy Standards "
 "(FHS). The FHS defines a set of rules that we *must* follow as package "
@@ -2727,6 +2917,9 @@ msgid ""
 msgstr ""
 "Pengecualian yang diajukan oleh kode Horizon dan mesin untuk menanganinya."
 
+msgid "Expected Method Never Called"
+msgstr "Metode yang Diharapkan Tidak Pernah Disebut"
+
 msgid "Extends IPField to allow comma-separated lists of addresses."
 msgstr ""
 "Memperluas IPField untuk memungkinkan daftar alamat yang dipisahkan koma."
@@ -2859,6 +3052,16 @@ msgstr ""
 "mengerjakannya. Namun, mendapatkan konfirmasi independen (dan memverifikasi "
 "bahwa itu bukan duplikat) selalu merupakan ide bagus jika Anda bisa bersabar."
 
+msgid ""
+"For client-side translation, Django embeds a corresponding Django message "
+"catalog. Javascript code on the client can use this catalog to do string "
+"replacement similar to how server-side translation works."
+msgstr ""
+"Untuk terjemahan sisi klien, Django menyematkan katalog pesan Django yang "
+"sesuai. Kode Javascript pada klien dapat menggunakan katalog ini untuk "
+"melakukan penggantian string yang mirip dengan cara kerja terjemahan sisi "
+"server."
+
 msgid ""
 "For convenience it defaults to the value of ``request.get_full_path()`` with "
 "any query string stripped off, e.g. the path at which the table was "
@@ -2876,6 +3079,9 @@ msgstr ""
 "dengan string kueri apa saja yang dilepas, misal jalur di mana alur kerja "
 "diminta."
 
+msgid "For detailed API information refer to the :ref:`ref-workflows`."
+msgstr "Untuk informasi API terperinci, lihat :ref:`ref-workflows`."
+
 msgid ""
 "For dynamic insertion of resources created in modals, this method returns "
 "the display name of the created object. Defaults to returning the ``name`` "
@@ -2903,6 +3109,17 @@ msgstr ""
 "Instance, memiliki satu direktori per langkah. Lihat ``openstack_dashboard/"
 "dashboards/project/static/dashboard/project/workflow/launch-instance/``"
 
+msgid ""
+"For localization in AngularJS files, use the AngularJS service ``horizon."
+"framework.util.i18n.gettext``. Ensure that the injected dependency is named "
+"``gettext`` or ``nggettext``. If you do not do this, message extraction will "
+"not work properly!"
+msgstr ""
+"Untuk lokalisasi dalam file AngularJS, gunakan layanan AngularJS ``horizon."
+"framework.util.i18n.gettext``. Pastikan ketergantungan yang disuntikkan "
+"bernama ``gettext`` atau ``nggettext``. Jika Anda tidak melakukan ini, "
+"ekstraksi pesan tidak akan berfungsi dengan baik!"
+
 msgid "For more detail, see :doc:`/configuration/settings`."
 msgstr "Untuk detail lebih lanjut, lihat :doc:`/configuration/settings`."
 
@@ -2956,6 +3173,13 @@ msgstr ""
 "number. Cukup perbaiki kesalahan, tambahkan nomor build dan lepaskan paket "
 "yang lebih baru."
 
+msgid ""
+"For this tutorial, we will not deal with the static directory, or the "
+"``tests.py`` file. Leave them as they are."
+msgstr ""
+"Untuk tutorial ini, kita tidak akan berurusan dengan direktori statis, atau "
+"file ``tests.py``. Biarkan mereka apa adanya."
+
 msgid ""
 "For usage information, tips & tricks and more examples check out the :ref:"
 "`topics-datatables`."
@@ -3036,6 +3260,9 @@ msgstr "Dari sana Anda dapat mengakses semua metode utama yang Anda butuhkan."
 msgid "Function was removed (hopefully it was deprecated)"
 msgstr "Fungsi telah dihapus (mudah-mudahan itu sudah ditinggalkan)"
 
+msgid "Functional tests"
+msgstr "Tes fungsional"
+
 msgid "General-purpose decorators for use with Horizon."
 msgstr "Dekorator tujuan umum untuk digunakan dengan Horizon."
 
@@ -3308,6 +3535,19 @@ msgstr ""
 "packages/horizon``, dan di Debian/Ubuntu itu ada di ``/usr/lib/python2.7/"
 "dist-packages/horizon``."
 
+msgid ""
+"Horizon provides a :class:`~horizon.forms.SelfHandlingForm` :class:`~horizon."
+"tables.DataTable` class which simplifies the vast majority of displaying "
+"data to an end-user. We're just going to skim the surface here, but it has a "
+"tremendous number of capabilities. Create a ``tables.py`` file under the "
+"``mypanel`` directory and add the following code::"
+msgstr ""
+"Horizon menyediakan kelas :class:`~horizon.forms.SelfHandlingForm` :class:"
+"`~horizon.tables.DataTable` yang menyederhanakan sebagian besar menampilkan "
+"data ke end-user.  Kami hanya akan membaca sekilas permukaannya di sini, "
+"tetapi ia memiliki sejumlah kemampuan yang luar biasa. Buat file ``tables."
+"py`` di bawah direktori ``mypanel`` dan tambahkan kode berikut::"
+
 msgid ""
 "Horizon provides a base test case class which provides several useful pre-"
 "prepared attributes for testing Horizon components."
@@ -3315,6 +3555,15 @@ msgstr ""
 "Horizon menyediakan kelas kasus uji dasar yang menyediakan beberapa atribut  "
 "pre-prepared yang berguna untuk menguji komponen Horizon."
 
+msgid ""
+"Horizon provides a custom management command to create a typical base "
+"dashboard structure for you. Run the following commands in your Horizon root "
+"directory. It generates most of the boilerplate code you need::"
+msgstr ""
+"Horizon menyediakan perintah manajemen khusus untuk membuat struktur dasbor "
+"dasar khas untuk Anda. Jalankan perintah berikut di direktori root Horizon "
+"Anda. Ini menghasilkan sebagian besar kode boilerplate yang Anda butuhkan::"
+
 msgid ""
 "Horizon provides the :mod:`horizon.tables` module to provide a convenient, "
 "reusable API for building data-driven displays and interfaces. The core "
@@ -3326,6 +3575,13 @@ msgstr ""
 "berbasis data. Komponen inti dari API ini terbagi dalam tiga kategori: "
 "``DataTables``, ``Actions``, dan ``Class-based Views``."
 
+msgid ""
+"Horizon provides three types of basic action classes which can be taken on a "
+"table's data:"
+msgstr ""
+"Horizon menyediakan tiga jenis kelas tindakan dasar yang dapat diambil pada "
+"data tabel:"
+
 msgid ""
 "Horizon ships with a single point of contact for hooking into your project "
 "if you aren't developing your own :class:`~horizon.Dashboard` or :class:"
@@ -3392,6 +3648,14 @@ msgstr ""
 "Horizon hulu. Untuk informasi tentang cara membuat branding/theming Anda "
 "sendiri, lihat :ref:`install-customizing`."
 
+msgid ""
+"Horizon uses ``mox`` as its mocking framework of choice, and while it offers "
+"many nice features, its output when a test fails can be quite mysterious."
+msgstr ""
+"Horizon menggunakan ``mox`` sebagai kerangka pilihan mengejeknya, dan "
+"sementara ia menawarkan banyak fitur bagus, hasilnya ketika sebuah tes gagal "
+"bisa sangat misterius."
+
 msgid ""
 "Horizon uses ``tox`` to manage virtual environments for testing and other "
 "development tasks. You can install it with"
@@ -3675,6 +3939,19 @@ msgstr ""
 "Jika hanya satu kelas tabel disediakan, variabel konteks ``table`` shortcut "
 "juga ditambahkan yang berisi tabel tunggal."
 
+msgid ""
+"If the error is in the Selenium test suite, you're likely getting very "
+"little information about the error. To increase the information provided to "
+"you, edit ``horizon/test/settings.py`` to set ``DEBUG = True`` and set the "
+"logging level to 'DEBUG' for the default 'test' logger. Also, add a logger "
+"config for Django::"
+msgstr ""
+"Jika kesalahan ada di suite uji Selenium, Anda kemungkinan akan mendapatkan "
+"sedikit informasi tentang kesalahan tersebut. Untuk menambah informasi yang "
+"diberikan kepada Anda, edit  ``horizon/test/settings.py`` untuk mengatur "
+"``DEBUG = True`` dan atur level logging ke 'DEBUG' untuk logger 'test' "
+"default. Juga, tambahkan konfigurasi logger untuk Django :"
+
 msgid ""
 "If the exception is not re-raised, an appropriate wrapper exception class "
 "indicating the type of exception that was encountered will be returned."
@@ -3744,6 +4021,13 @@ msgstr ""
 "Jika nilainya sesuai dengan ``project_id`` tempat token pengguna dicakup, "
 "maka akses diizinkan."
 
+msgid ""
+"If there is unexpected wrapping/truncation there might not be enough space "
+"for translations."
+msgstr ""
+"Jika ada wrapping/truncation yang tidak terduga, mungkin tidak ada cukup "
+"ruang untuk terjemahan."
+
 msgid ""
 "If those are too big, there are lots of great ways to get involved without "
 "plunging in head-first:"
@@ -3774,6 +4058,28 @@ msgstr ""
 "dengan mencoba men-debug mengapa tes tertentu gagal, Anda dapat melewati "
 "intro dan langsung melompat ke :ref:`debugging_unit_tests`."
 
+msgid ""
+"If you are interested in contributing translations, you may want to "
+"investigate `Zanata <https://translate.openstack.org>`_ and the `upstream "
+"translations <https://docs.openstack.org/i18n/latest/>`_. You can visit the "
+"internationalization project IRC channel **#openstack-i18n**, if you need "
+"further assistance."
+msgstr ""
+"Jika Anda tertarik untuk berkontribusi terjemahan, Anda mungkin ingin "
+"menyelidiki `Zanata <https://translate.openstack.org>`_ dan `upstream "
+"translations <https://docs.openstack.org/i18n/latest/>`_. Anda dapat "
+"mengunjungi saluran IRC proyek internasionalisasi **#openstack-i18n**, jika "
+"Anda memerlukan bantuan lebih lanjut."
+
+msgid ""
+"If you are setting up a project and need to know how to make it "
+"translatable, please refer to `this guide <https://docs.openstack.org/infra/"
+"manual/creators.html#enabling-translation-infrastructure>`_."
+msgstr ""
+"Jika Anda membuat proyek dan perlu tahu cara membuatnya diterjemahkan, "
+"silakan merujuk `this guide <https://docs.openstack.org/infra/manual/"
+"creators.html#enabling-translation-infrastructure>`_."
+
 msgid ""
 "If you are unable to use existing variables - such as for very specific "
 "functionality - keep the new rules as specific as possible to your component "
@@ -3784,6 +4090,17 @@ msgstr ""
 "mungkin untuk komponen Anda sehingga tidak menimbulkan masalah di tempat "
 "yang tidak terduga."
 
+msgid ""
+"If you are writing software for a global audience, you must ensure that it "
+"is translated so that other people around the world are able to use it. "
+"Adding translation to your code is not that hard and a requirement for "
+"horizon."
+msgstr ""
+"Jika Anda menulis perangkat lunak untuk audiens global, Anda harus "
+"memastikan bahwa itu diterjemahkan sehingga orang lain di seluruh dunia "
+"dapat menggunakannya. Menambahkan terjemahan ke kode Anda tidak terlalu "
+"sulit dan persyaratan untuk horizon."
+
 msgid ""
 "If you can't run a virtual display, or would prefer not to, you can use the "
 "PhantomJS web driver instead::"
@@ -3791,6 +4108,16 @@ msgstr ""
 "Jika Anda tidak dapat menjalankan tampilan virtual, atau memilih untuk tidak "
 "melakukannya, Anda dapat menggunakan driver web PhantomJS sebagai gantinya::"
 
+msgid ""
+"If you do the first suggestion above *first* it makes the second one far "
+"less painful. Write once, use everywhere."
+msgstr ""
+"Jika Anda melakukan saran pertama di atas *first*  itu membuat yang kedua "
+"jauh lebih tidak menyakitkan. Tulis sekali, gunakan di mana-mana."
+
+msgid "If you get new crashes, there is probably a bug."
+msgstr "Jika Anda mendapatkan crash baru, mungkin ada bug."
+
 msgid ""
 "If you have an idea for a new feature that isn't in a blueprint yet, it's a "
 "good idea to write the blueprint first, so you don't end up writing a bunch "
@@ -3812,6 +4139,34 @@ msgstr ""
 "Jika Anda perlu memperbarui catatan rilis dari rilis yang lalu, edit file "
 "catatan rilis yang sesuai di cabang stabil secara langsung."
 
+msgid "If you see a string in English it's not translatable. Should it be?"
+msgstr ""
+"Jika Anda melihat string dalam bahasa Inggris, itu tidak dapat "
+"diterjemahkan. Haruskah begitu?"
+
+msgid ""
+"If you see a string in the proper translated language, it comes from an "
+"external source. (That's not bad, just sometimes useful to know)"
+msgstr ""
+"Jika Anda melihat string dalam bahasa terjemahan yang tepat, itu berasal "
+"dari sumber eksternal. (Itu tidak buruk, kadang-kadang hanya berguna untuk "
+"mengetahui)"
+
+msgid ""
+"If you see brackets next to each other that might be concatenation. "
+"Concatenation can make quality translations difficult or impossible. See "
+"`Use string formatting variables, never perform string concatenation "
+"<https://wiki.openstack.org/wiki/I18n/"
+"TranslatableStrings#Use_string_formating_variables.2C_never_perform_string_concatenation>`_ "
+"for additional information."
+msgstr ""
+"Jika Anda melihat tanda kurung di samping satu sama lain yang mungkin "
+"merupakan gabungan. Penggabungan dapat membuat terjemahan yang berkualitas "
+"menjadi sulit atau tidak mungkin. Lihat `Use string formatting variables, "
+"never perform string concatenation <https://wiki.openstack.org/wiki/I18n/"
+"TranslatableStrings#Use_string_formating_variables.2C_never_perform_string_concatenation>`_ "
+"untuk informasi tambahan."
+
 msgid ""
 "If you turned compression off during development via ``COMPRESS_ENABLED = "
 "False`` in local_settings.py, re-enable compression and test your code "
@@ -3832,6 +4187,33 @@ msgstr ""
 "dari ``openstack_dashboard/local/local_settings.py.example`` untuk "
 "melakukannya, pertama perbarui Horizon"
 
+msgid ""
+"If you use the ``tree mydashboard`` command to list the ``mydashboard`` "
+"directory in ``openstack_dashboard/dashboards`` , you will see a directory "
+"structure that looks like the following::"
+msgstr ""
+"Jika Anda menggunakan perintah ``tree mydashboard`` untuk membuat daftar "
+"direktori ``mydashboard`` di ``openstack_dashboard/dashboards`` , Anda akan "
+"melihat struktur direktori yang terlihat seperti berikut ::"
+
+msgid ""
+"If you want the dashboard name to be something else, you can change the "
+"``name`` attribute in the ``dashboard.py`` file . For example, you can "
+"change it to be ``My Dashboard`` ::"
+msgstr ""
+"Jika Anda ingin nama dasbor menjadi sesuatu yang lain, Anda dapat mengubah "
+"atribut ``name`` dalam file ``dashboard.py``. Misalnya, Anda dapat "
+"mengubahnya menjadi ``My Dashboard`` ::"
+
+msgid ""
+"If you want the panel name to be something else, you can change the ``name`` "
+"attribute in the ``panel.py`` file . For example, you can change it to be "
+"``My Panel``::"
+msgstr ""
+"Jika Anda ingin nama panel menjadi sesuatu yang lain, Anda dapat mengubah "
+"atribut ``name`` dalam file ``panel.py``. Misalnya, Anda dapat mengubahnya "
+"menjadi ``My Panel``::"
+
 msgid ""
 "If you want to run the suite headless, without being able to see them (as "
 "they are ran on Jenkins), you can run the tests::"
@@ -3858,6 +4240,9 @@ msgstr ""
 "kode yang tidak dipelihara, jadi jika bug ditemukan di hulu asli, itu tidak "
 "dapat dengan mudah diperbaiki dengan memperbarui satu paket."
 
+msgid "In AngularJS templates"
+msgstr "Dalam template AngularJS"
+
 msgid ""
 "In Debian, it is generally forbidden to have multiple versions of the same "
 "library in the same Debian release. Very few exceptions exist."
@@ -3865,9 +4250,40 @@ msgstr ""
 "Di Debian, umumnya dilarang memiliki beberapa versi dari perpustakaan yang "
 "sama dalam rilis Debian yang sama. Sangat sedikit pengecualian yang ada."
 
+msgid "In Django"
+msgstr "Dalam Django"
+
+msgid "In Django templates"
+msgstr "Dalam template Django"
+
+msgid "In JavaScript"
+msgstr "Dalam JavaScript"
+
 msgid "In Keystone V3, region has been deprecated in favor of region_id."
 msgstr "Di Keystone V3, region sudah tidak digunakan lagi karena region_id."
 
+msgid ""
+"In ``urls.py``, we have the named parameter. E.g. ``resource_class_id``. ::"
+msgstr ""
+"Dalam ``urls.py``, kami memiliki parameter bernama. Misalnya. "
+"``resource_class_id``. ::"
+
+msgid ""
+"In ``views.py``, we pass data to the template and to the action(form) "
+"(action can also pass data to the ``get_context_data`` method and to the "
+"template). ::"
+msgstr ""
+"Dalam ``views.py``, kami meneruskan data ke template dan ke action (form) "
+"(action juga dapat meneruskan data ke metode ``get_context_data`` dan ke "
+"templat). ::"
+
+msgid ""
+"In ``workflows.py`` we process the data, it is just more complex django "
+"form. ::"
+msgstr ""
+"Dalam ``workflows.py`` kami memproses data, itu hanya bentuk Django yang "
+"lebih kompleks. ::"
+
 msgid ""
 "In addition to John Papa, the following guidelines are divided into required "
 "and recommended sections."
@@ -3944,6 +4360,24 @@ msgstr ""
 "Horizon built untuk Django-1.8. Ini adalah upaya besar dan perlu dievaluasi "
 "dengan cermat."
 
+msgid ""
+"In order for translation to work properly, we need to know the user's "
+"locale. In horizon, the user can specify the locale using the Settings "
+"panel. Once we know the locale, we know which Portable Object (PO) file to "
+"use. The PO file is the file we received from translators in the message "
+"extraction process. The gettext functions that we wrapped our code around "
+"are then able to replace the untranslated strings with the translated one by "
+"using the untranslated string as the message id."
+msgstr ""
+"Agar terjemahan berfungsi dengan baik, kita perlu mengetahui lokal pengguna. "
+"Di horizon, pengguna dapat menentukan lokal menggunakan panel Setting. "
+"Setelah kami tahu lokalnya, kami tahu file Portable Object (PO) mana yang "
+"akan digunakan. File PO adalah file yang kami terima dari penerjemah dalam "
+"proses ekstraksi pesan. Fungsi gettext dimana kita membungkus kode kita, "
+"kemudian fungsi gettext dapat mengganti string yang tidak diterjemahkan "
+"dengan penterjemah yang menggunakan string yang tidak diterjemahkan sebagai "
+"id pesan."
+
 msgid "In our HTML files, we should focus on layout."
 msgstr "Dalam file HTML kita, kita harus fokus pada tata letak."
 
@@ -3988,6 +4422,13 @@ msgstr ""
 "Jika tidak ada parameter permintaan GET, nilai parameter kueri tidak valid, "
 "atau tab tidak allowed/enabled, nilai balik fungsi ini adalah None."
 
+msgid ""
+"In the example above, we imported ``ugettext`` as ``_``. This is a common "
+"alias for gettext or any of its variants."
+msgstr ""
+"Pada contoh di atas, kami mengimpor ``ugettext`` sebagai ``_``. Ini adalah "
+"alias umum untuk gettext atau variannya."
+
 msgid ""
 "In the first approach a jQuery object for ``document`` is created each time. "
 "The second approach creates only one jQuery object and reuses it. Each "
@@ -4004,6 +4445,33 @@ msgstr ""
 "Dalam templat Anda hanya perlu menyertakan hal berikut untuk membuat "
 "(render) tabel::"
 
+msgid ""
+"In this case we want a starting view type that works with both tabs and "
+"tables... that'd be the :class:`~horizon.tabs.TabbedTableView` class. It "
+"takes the best of the dynamic delayed-loading capabilities tab groups "
+"provide and mixes in the actions and AJAX-updating that tables are capable "
+"of with almost no work on the user's end. Change ``views.APIView`` to be "
+"``tabs.TabbedTableView`` and add ``MypanelTabs`` as the tab group class in "
+"the ``IndexView`` class::"
+msgstr ""
+"Dalam hal ini kami ingin jenis view awal yang berfungsi dengan tab dan "
+"tabel ... yang akan menjadi kelas :class: `~ horizon.tabs.TabbedTableView`. "
+"Dibutuhkan yang terbaik dari kemampuan dinamis yang disediakan grup tab yang "
+"disediakan dan digabungkan dalam tindakan dan pembaruan AJAX yang mampu "
+"dilakukan tabel dengan hampir tidak ada pekerjaan di sisi pengguna. Ubah "
+"``views.APIView`` menjadi ``tabs.TabbedTableView`` dan tambahkan "
+"``MypanelTabs`` sebagai kelas grup tab di kelas ``IndexView``::"
+
+msgid ""
+"In this scenario you may need to submit a secondary patch to address test "
+"coverage for another function within horizon to ensure tests rise above the "
+"coverage threshold and your original patch can pass the necessary tests."
+msgstr ""
+"Dalam skenario ini, Anda mungkin perlu mengirimkan patch sekunder untuk "
+"mengatasi cakupan tes untuk fungsi lain dalam horizon untuk memastikan tes "
+"naik di atas ambang batas cakupan dan patch asli Anda dapat lulus tes yang "
+"diperlukan."
+
 msgid "In-depth documentation for Horizon framework and its APIs."
 msgstr "Dokumentasi mendalam untuk kerangka Horizon dan API-nya."
 
@@ -4077,6 +4545,9 @@ msgstr "Instruksi untuk pengaturan ESLint: `ESLint setup instructions`_"
 msgid "Integrating a new xstatic package into Horizon"
 msgstr "Mengintegrasikan paket xstatic baru ke Horizon"
 
+msgid "Integration Tests"
+msgstr "Tes Integrasi"
+
 msgid "Interfacing with other OpenStack teams"
 msgstr "Berinteraksi dengan tim OpenStack lainnya"
 
@@ -4181,6 +4652,17 @@ msgstr ""
 "Tidak disarankan agar catatan rilis individual menggunakan bagian **prelude "
 "** karena untuk highlight rilis."
 
+msgid ""
+"It is possible for tests to fail on your patch due to the npm-run-test not "
+"passing the minimum threshold. This is not necessarily related directly to "
+"the functions in the patch that have failed, but more that there are not "
+"enough tests across horizon that are related to your patch."
+msgstr ""
+"Mungkin saja tes gagal pada patch Anda karena npm-run-test tidak melewati "
+"ambang minimum. Ini tidak selalu terkait langsung dengan fungsi-fungsi dalam "
+"patch yang gagal, tetapi lebih dari itu tidak ada cukup tes lintas horizon "
+"yang terkait dengan patch Anda."
+
 msgid ""
 "It is raised if required data is missing, or existing data is not valid."
 msgstr ""
@@ -4248,6 +4730,19 @@ msgstr ""
 "``False`` untuk sebagian keberhasilan, misal ada kesalahan non-kritis. (Jika "
 "gagal sepenuhnya fungsi tidak akan kembali.)"
 
+msgid ""
+"It should look weird. More specifically, the translatable segments are going "
+"to start and end with a bracket and they are going to have some added "
+"characters. For example, \"Log In\" will become \"[~Log In~您好яшçあ]\" This "
+"is useful because you can inspect for the following, and consider if your "
+"code is working like it should:"
+msgstr ""
+"Seharusnya terlihat aneh. Lebih khusus lagi, segmen yang diterjemahkan akan "
+"mulai dan diakhiri dengan braket dan mereka akan memiliki beberapa karakter "
+"tambahan. Misalnya, \"Log In\" akan menjadi  \"[~Log In~您好яшçあ]\"  Ini "
+"berguna karena Anda dapat memeriksa hal-hal berikut, dan mempertimbangkan "
+"apakah kode Anda berfungsi seperti seharusnya:"
+
 msgid ""
 "It's also possible to run a subset of the tests. Open ``tox.ini`` in the "
 "Horizon root directory to see a list of test environments. You can read more "
@@ -4258,6 +4753,19 @@ msgstr ""
 "membaca lebih lanjut tentang tox secara umum di https://tox.readthedocs.io/"
 "en/latest/."
 
+msgid ""
+"It's also very common to avoid testing things you really care about because "
+"it's more difficult. Verifying that the proper messages were displayed to "
+"the user after an action, testing for form errors, making sure exception "
+"handling is tested... these types of things aren't always easy, but they're "
+"extremely necessary."
+msgstr ""
+"Juga sangat umum untuk menghindari pengujian hal-hal yang benar-benar Anda "
+"pedulikan karena itu lebih sulit. Memverifikasi bahwa pesan yang tepat "
+"ditampilkan kepada pengguna setelah tindakan, menguji kesalahan formulir, "
+"memastikan penanganan pengecualian diuji ... hal-hal semacam ini tidak "
+"selalu mudah, tetapi sangat perlu."
+
 msgid ""
 "Its interface is very straightforward, but it is responsible for handling "
 "some very important tasks such as:"
@@ -4337,6 +4845,33 @@ msgstr ""
 "WEBSSO_KEYSTONE_URL didefinisikan, nilainya akan digunakan. Kalau tidak, "
 "nilainya diturunkan dari: - OPENSTACK_KEYSTONE_URL - AVAILABLE_REGIONS"
 
+msgid ""
+"Lastly, this code introduces the concept of error handling in horizon. The :"
+"func:`horizon.exceptions.handle` function is a centralized error handling "
+"mechanism that takes all the guess-work and inconsistency out of dealing "
+"with exceptions from the API. Use it everywhere."
+msgstr ""
+"Terakhir, kode ini memperkenalkan konsep penanganan kesalahan di horizon. "
+"Fungsi :func:`horizon.exceptions.handle` adalah mekanisme penanganan "
+"kesalahan terpusat yang menghilangkan semua dugaan dan inkonsistensi dari "
+"berurusan dengan pengecualian dari API. Gunakan di mana-mana."
+
+msgid ""
+"Lastly, we added a ``Meta`` class which indicates the meta object that "
+"describes the ``instances`` table."
+msgstr ""
+"Terakhir, kami menambahkan kelas ``Meta`` yang menunjukkan objek meta yang "
+"menggambarkan tabel ``instances``."
+
+msgid ""
+"Limiting our focus just to unit tests, there are a number of things you can "
+"do to make your unit tests as useful, maintainable, and unburdensome as "
+"possible."
+msgstr ""
+"Membatasi fokus kami hanya untuk pengujian unit, ada sejumlah hal yang dapat "
+"Anda lakukan untuk membuat tes unit Anda bermanfaat, dapat dipertahankan, "
+"dan tidak memberatkan sebanyak mungkin."
+
 msgid "Lines added to ``horizon/test/jasmine/jasmine_tests.py``:"
 msgstr "Baris ditambahkan ke ``horizon/test/jasmine/jasmine_tests.py``:"
 
@@ -4372,6 +4907,9 @@ msgstr "Temukan tindakan yang sesuai dan rutekan data objek ke sana."
 msgid "Log error info when exception occurred."
 msgstr "Info kesalahan log saat pengecualian terjadi."
 
+msgid "Log in and change to the language you pseudo translated."
+msgstr "Masuk dan ubah ke bahasa yang Anda pseudo terjemahkan."
+
 msgid "Log messages and print statements go directly to the console."
 msgstr "Log pesan dan cetak pernyataan langsung ke konsol."
 
@@ -4421,6 +4959,50 @@ msgstr ""
 "Pastikan unit tes dan tugas serat lulus (linting tasks pass) dengan "
 "menjalankan ``tox``"
 
+msgid ""
+"Make sure there's nothing amiss in your templates (particularly the ``{% url "
+"%}`` tag and its arguments). This often comes up when refactoring views or "
+"renaming context variables. It can easily result in errors that you might "
+"not stumble across while clicking around the development server."
+msgstr ""
+"Pastikan tidak ada yang salah dalam template Anda (terutama tag ``{% url %}"
+"``  dan argumennya). Ini sering muncul ketika refactoring tampilan atau "
+"mengubah nama variabel konteks. Ini dapat dengan mudah menghasilkan "
+"kesalahan yang mungkin tidak Anda temui saat mengklik di sekitar server "
+"pengembangan."
+
+msgid ""
+"Make sure you repeat any stubbed out method calls that happen more than "
+"once. They don't automatically repeat, you have to explicitly define them. "
+"While this is a nuisance, it makes you acutely aware of how many API calls "
+"are involved in a particular function."
+msgstr ""
+"Pastikan Anda mengulangi semua panggilan metode yang terhenti yang terjadi "
+"lebih dari sekali. Mereka tidak secara otomatis mengulang, Anda harus "
+"mendefinisikannya secara eksplisit. Meskipun ini merepotkan, ini membuat "
+"Anda benar-benar sadar berapa banyak panggilan API yang terlibat dalam "
+"fungsi tertentu."
+
+msgid ""
+"Make sure you stub out the method exactly as it's called in the code being "
+"tested. For example, if your real code calls ``api.keystone.tenant_get``, "
+"stubbing out ``api.tenant_get`` (available for legacy reasons) will fail."
+msgstr ""
+"Pastikan Anda mematikan metode persis seperti yang disebut dalam kode yang "
+"sedang diuji. Misalnya, jika kode asli Anda memanggil ``api.keystone."
+"tenant_get``, mematikan ``api.tenant_get`` (tersedia untuk legacy reason) "
+"akan gagal."
+
+msgid ""
+"Make sure you're not redirecting to views that no longer exist, e.g. the "
+"``index`` view for a panel that got combined (such as instances & volumes)."
+msgstr ""
+"Pastikan Anda tidak mengarahkan ulang ke tampilan yang tidak ada lagi, misal "
+"tampilan ``index`` untuk panel yang digabungkan (seperti instance & volume)."
+
+msgid "Make sure your .pot files are up to date"
+msgstr "Pastikan file .pot Anda terbaru"
+
 msgid ""
 "Make sure your code is ready for translation: See :ref:`pseudo_translation`."
 msgstr ""
@@ -4432,6 +5014,22 @@ msgid ""
 msgstr ""
 "Pastikan kode Anda mutakhir dengan master terbaru: ``git pull --rebase``"
 
+msgid ""
+"Make sure your mock calls are in order before calling ``mox.ReplayAll``. The "
+"order matters."
+msgstr ""
+"Pastikan panggilan tiruan Anda sudah beres sebelum memanggil ``mox."
+"ReplayAll``. Urutan itu penting."
+
+msgid ""
+"Make sure your test data are completely in line with the expected inputs. "
+"Again, ``str`` vs. ``int`` or missing properties on test objects will kill "
+"your tests."
+msgstr ""
+"Pastikan data pengujian Anda sepenuhnya sejalan dengan input yang "
+"diharapkan. Sekali lagi, ``str`` vs. ``int`` atau properti yang hilang pada "
+"objek uji akan mematikan pengujian Anda."
+
 msgid ""
 "Make use of Sphinx's autodoc feature to document modules, classes and "
 "functions. This keeps the docs close to the source."
@@ -4439,9 +5037,21 @@ msgstr ""
 "Manfaatkan fitur autodoc Sphinx untuk mendokumentasikan modul, kelas, dan "
 "fungsi. Ini membuat dokumen dekat dengan sumbernya."
 
+msgid ""
+"Make your test data as accurate to reality as possible. Supply *all* the "
+"attributes of an object, provide objects in all the various states you may "
+"want to test."
+msgstr ""
+"Jadikan data pengujian Anda seakurat mungkin dengan kenyataan. Berikan *all* "
+"atribut suatu objek, berikan objek di semua berbagai negara bagian yang "
+"mungkin ingin Anda uji."
+
 msgid "Making Contributions"
 msgstr "Membuat Kontribusi"
 
+msgid "Making strings translatable"
+msgstr "Membuat string dapat diterjemahkan"
+
 msgid "Manageable"
 msgstr "Manageable"
 
@@ -4477,6 +5087,29 @@ msgstr ""
 "Depends-On, sebenarnya aman untuk +W patch Horizon, yang akan ditahan hingga "
 "penggabungan patch upper-constraints.txt terkait."
 
+msgid "Message Extraction"
+msgstr "Ekstraksi Pesan"
+
+msgid "Message Substitution"
+msgstr "Substitusi Pesan"
+
+msgid ""
+"Message extraction is the process of collecting translatable strings from "
+"the code. The diagram above shows the flow of how messages are extracted and "
+"then translated. Lets break this up into steps we can follow:"
+msgstr ""
+"Ekstraksi pesan adalah proses mengumpulkan string yang dapat diterjemahkan "
+"dari kode. Diagram di atas menunjukkan aliran bagaimana pesan diekstraksi "
+"dan kemudian diterjemahkan. Mari kita bagi ini menjadi beberapa langkah yang "
+"bisa kita ikuti: "
+
+msgid ""
+"Message substitution is not the reverse process of message extraction. The "
+"process is entirely different. Lets walk through this process."
+msgstr ""
+"Substitusi pesan bukanlah proses kebalikan dari ekstraksi pesan. Prosesnya "
+"sama sekali berbeda. Mari kita berjalan melalui proses ini."
+
 msgid "Metaclass to process ExternalFileField fields in a specific way."
 msgstr ""
 "Metaclass untuk memproses field ExternalFileField dengan cara tertentu."
@@ -4518,6 +5151,25 @@ msgstr "Kebijakan Minified JavaScript"
 msgid "Mixin class to allow ModalFormView and WorkflowView together."
 msgstr "Kelas Mixin untuk memungkinkan ModalFormView dan WorkflowView bersama."
 
+msgid "Mocking"
+msgstr "Mocking"
+
+msgid ""
+"Mocking is the practice of providing stand-ins for objects or pieces of code "
+"you don't need to test. While convenient, they should be used with *extreme* "
+"caution."
+msgstr ""
+"Mocking adalah praktik menyediakan pengamanan untuk objek atau potongan kode "
+"yang tidak perlu Anda uji. Meskipun nyaman, mereka harus digunakan dengan "
+"hati-hati *extreme*."
+
+msgid ""
+"Modify the ``Mydashboard`` class to include ``Mygroup`` and add ``mypanel`` "
+"as the default panel::"
+msgstr ""
+"Ubah kelas ``Mydashboard`` untuk memasukkan ``Mygroup`` dan tambahkan "
+"``mypanel`` sebagai panel default::"
+
 msgid "Module Structure"
 msgstr "Struktur Modul"
 
@@ -4635,6 +5287,25 @@ msgstr ""
 msgid "Nova"
 msgstr "Nova"
 
+msgid ""
+"Now let's create and add a filter action to the table. To do so, we will "
+"need to edit the ``tables.py`` file used above. To add a filter action which "
+"will only show rows which contain the string entered in the filter field, we "
+"must first define the action::"
+msgstr ""
+"Sekarang mari kita buat dan tambahkan aksi filter ke tabel. Untuk "
+"melakukannya, kita perlu mengedit file ``tables.py`` yang digunakan di atas. "
+"Untuk menambahkan tindakan filter yang hanya akan menampilkan baris yang "
+"berisi string yang dimasukkan dalam bidang filter, pertama-tama kita harus "
+"mendefinisikan tindakan (action)::"
+
+msgid ""
+"Often requires writing a separate set of tests and/or using a different "
+"testing framework from your unit tests."
+msgstr ""
+"Seringkali membutuhkan penulisan serangkaian tes terpisah dan/atau "
+"menggunakan kerangka kerja pengujian yang berbeda dari tes unit Anda."
+
 msgid "On RPM-based distributions (e.g., Fedora/RHEL/CentOS/Scientific Linux)"
 msgstr ""
 "Pada distribusi berbasis RPM (misal, Fedora/RHEL/CentOS/Scientific Linux)"
@@ -4645,6 +5316,22 @@ msgstr "Pada Ubuntu"
 msgid "Once logged out, defines the URL where to redirect after login"
 msgstr "Setelah logout, tentukan URL tempat pengalihan setelah login"
 
+msgid ""
+"Once marked, we can then run ``tox -e manage -- extract_messages``, which "
+"searches the codebase for these markers and extracts them into a Portable "
+"Object Template (POT) file. In horizon, we extract from both the ``horizon`` "
+"folder and the ``openstack_dashboard`` folder. We use the AngularJS "
+"extractor for JavaScript and HTML files and the Django extractor for Python "
+"and Django templates; both extractors are Babel plugins."
+msgstr ""
+"Setelah ditandai, kita dapat menjalankan ``tox -e manage -- "
+"extract_messages``,  yang mencari basis kode untuk marker ini dan "
+"mengekstraknya menjadi file Portable Object Template (POT). Di horizon, kami "
+"mengekstrak dari folder ``horizon`` dan folder ``openstack_dashboard``. Kami "
+"menggunakan AngularJS extractor untuk JavaScript dan file HTML dan Django "
+"extractor untuk templat Python dan Django; kedua ekstraktor adalah plugin "
+"Babel."
+
 msgid ""
 "Once the Horizon server is running, point a web browser to ``http://"
 "localhost`` or to the IP and port the server is listening for. Enter your "
@@ -4731,6 +5418,33 @@ msgstr ""
 "default, ini akan menjalankan server pengembangan di ``http://"
 "localhost:8000``."
 
+msgid ""
+"Open the ``dashboard.py`` file again, insert the following code above the "
+"``Mydashboard`` class. This code defines the ``Mygroup`` class and adds a "
+"panel called ``mypanel``::"
+msgstr ""
+"Buka file ``dashboard.py`` lagi, masukkan kode berikut di atas kelas "
+"``Mydashboard``. Kode ini mendefinisikan kelas ``Mygroup`` dan menambahkan "
+"panel yang disebut ``mypanel`` ::"
+
+msgid ""
+"Open the ``dashboard.py`` file. You will notice the following code has been "
+"automatically generated::"
+msgstr ""
+"Buka file ``dashboard.py``. Anda akan melihat kode berikut telah dihasilkan "
+"secara otomatis::"
+
+msgid ""
+"Open the ``panel.py`` file, you will have the following auto-generated code::"
+msgstr ""
+"Buka file ``panel.py``, Anda akan memiliki kode yang dibuat secara otomatis "
+"berikut::"
+
+msgid ""
+"Open the ``views.py`` file, the auto-generated code is like the following::"
+msgstr ""
+"Buka file ``views.py``, kode yang dibuat secara otomatis seperti berikut::"
+
 msgid ""
 "OpenStack Dashboard is an example of a Horizon-based Angular application. "
 "Other applications built on the Horizon framework can follow a similar "
@@ -4817,6 +5531,9 @@ msgstr "Ganti untuk menyediakan fungsi penghapusan khusus untuk data Anda."
 msgid "Override to separate rows into categories."
 msgstr "Ganti untuk memisahkan baris ke dalam kategori."
 
+msgid "Overview and Architecture"
+msgstr "Tinjauan Umum dan Arsitektur"
+
 msgid ""
 "Package build systems are disconnected from the outside network (for several "
 "reasons). Other packaging systems download dependencies directly from the "
@@ -5045,6 +5762,9 @@ msgstr ""
 msgid "Provides the actual filtering logic."
 msgstr "Menyediakan logika penyaringan yang sebenarnya."
 
+msgid "Pseudo translation tool"
+msgstr "Alat terjemahan semu"
+
 msgid ""
 "Pull that patch down so you have the edited upper-constraints.txt file "
 "locally."
@@ -5209,6 +5929,16 @@ msgstr ""
 "Release versi Horizon baru yang kompatibel untuk mengatasi masalah dalam "
 "rilis xstatic baru:"
 
+msgid ""
+"Remember those markers we talked about earlier? Most of them are functions "
+"like gettext or one of its variants. This allows the function to serve a "
+"dual purpose - acting as a marker and also as a replacer."
+msgstr ""
+"Ingat marker yang kita bicarakan sebelumnya? Kebanyakan dari mereka adalah "
+"fungsi seperti gettext atau salah satu variannya. Ini memungkinkan fungsi "
+"untuk melayani tujuan ganda - bertindak sebagai penanda (marker) dan juga "
+"sebagai pengganti (replacer)."
+
 msgid ""
 "Removals and deprecations of back-end feature supports basically follows "
 "`the standard deprecation policy <https://governance.openstack.org/tc/"
@@ -5283,6 +6013,13 @@ msgstr ""
 "Wajib. Nama pendek atau \"slug\" mewakili tindakan ini. Nama ini tidak boleh "
 "diubah saat runtime."
 
+msgid ""
+"Requires an additional layer of thinking to define functional requirements "
+"in terms of inputs and outputs."
+msgstr ""
+"Membutuhkan lapisan pemikiran tambahan untuk mendefinisikan persyaratan "
+"fungsional dalam hal input dan output."
+
 msgid "Restart the web server."
 msgstr "Mulai ulang server web."
 
@@ -5658,9 +6395,22 @@ msgstr "Baris mampu memperbarui AJAX, dengan sedikit pekerjaan tambahan:"
 msgid "Rule Targets"
 msgstr "Rule Targets"
 
+msgid ""
+"Run the pseudo tool to create pseudo translations. This example replaces the "
+"German translation with a pseudo translation"
+msgstr ""
+"Jalankan alat pseudo (semu) untuk membuat terjemahan pseudo (semu). Contoh "
+"ini menggantikan terjemahan Jerman dengan terjemahan semu"
+
+msgid "Run your development server."
+msgstr "Jalankan server pengembangan Anda."
+
 msgid "Running Tests"
 msgstr "Running Tests"
 
+msgid "Running the pseudo translation tool"
+msgstr "Menjalankan alat terjemahan semu"
+
 msgid "Running unit tests at build time"
 msgstr "Menjalankan unit test pada waktu build"
 
@@ -5710,6 +6460,13 @@ msgstr ""
 msgid "Scoped Keystone access info object"
 msgstr "Objek info akses Scoped Keystone"
 
+msgid ""
+"Screenshot directory could be set through horizon.conf file, default value: "
+"``./integration_tests_screenshots``"
+msgstr ""
+"Direktori screenshot dapat diatur melalui file horizon.conf, nilai default: "
+"``./integration_tests_screenshots``"
+
 msgid "Second, you'll need to take care of a couple administrative tasks:"
 msgstr "Kedua, Anda harus mengurus beberapa tugas administrasi:"
 
@@ -5897,6 +6654,19 @@ msgstr ""
 "pengecualian :exc:` ~horizon.exceptions.NotAuthenticated` jika pengguna "
 "tidak masuk."
 
+msgid ""
+"Similarly, don't mock return values when you could construct a real return "
+"value of the correct type with the correct attributes. You're just adding "
+"another point of potential failure by exercising your mocking framework "
+"instead of real code. Following the suggestions for testing above will make "
+"this a lot less burdensome."
+msgstr ""
+"Demikian pula, jangan mock nilai pengembalian ketika Anda bisa membangun "
+"nilai pengembalian nyata dari jenis yang benar dengan atribut yang benar. "
+"Anda hanya menambahkan titik kegagalan potensial lainnya dengan menggunakan "
+"kerangka kerja mock Anda daripada kode sungguhan. Mengikuti saran untuk "
+"pengujian di atas akan membuat ini jauh lebih tidak memberatkan."
+
 msgid "Simple mix of ``DynamicChoiceField`` and ``TypedChoiceField``."
 msgstr ""
 "Campuran sederhana dari ``DynamicChoiceField`` dan ``TypedChoiceField``."
@@ -5922,6 +6692,18 @@ msgstr ""
 msgid "So it's enough to just import and use them, e.g. ::"
 msgstr "Jadi cukup mengimpor dan menggunakannya saja, misal ::"
 
+msgid ""
+"So we have a table, ready to receive our data. We could go straight to a "
+"view from here, but in this case we're also going to use horizon's :class:"
+"`~horizon.tabs.TabGroup` class."
+msgstr ""
+"Jadi kami punya tabel, siap menerima data kami. Kita bisa langsung melihat "
+"dari sini, tetapi dalam kasus ini kita juga akan menggunakan kelas horizon :"
+"class: `~ horizon.tabs.TabGroup`."
+
+msgid "So what should I write?"
+msgstr "Jadi apa yang harus saya tulis?"
+
 msgid "Software packages"
 msgstr "Paket software"
 
@@ -5955,6 +6737,17 @@ msgstr ""
 "Beberapa widget terbuat dari beberapa elemen HTML - yaitu, RadioSelect. Ini "
 "adalah kelas yang mewakili elemen HTML \"inner\" dari sebuah widget."
 
+msgid ""
+"Sometimes, it is helpful to provide some context via the ``comment`` "
+"template tag. There a number of other tags and filters at your disposal "
+"should you need to use them. For more information, see the `Django docs "
+"<https://docs.djangoproject.com/en/1.8/topics/i18n/translation/>`_"
+msgstr ""
+"Terkadang, sangat membantu untuk menyediakan beberapa konteks melalui tag "
+"template ``comment``. Ada sejumlah tag dan filter lain yang Anda inginkan "
+"jika Anda perlu menggunakannya. Untuk informasi lebih lanjut, lihat `Django "
+"docs <https://docs.djangoproject.com/en/1.8/topics/i18n/translation/>`_"
+
 msgid ""
 "Source code changes aren't as easily lost when running ``unstack.sh`` / "
 "``stack.sh``"
@@ -6250,6 +7043,9 @@ msgstr ""
 msgid "Tables"
 msgstr "Tables"
 
+msgid "Tables, Tabs, and Views"
+msgstr "Tables, Tabs, dan Views"
+
 msgid "Tabs"
 msgstr "Tabs"
 
@@ -6263,6 +7059,9 @@ msgstr ""
 msgid "Templates"
 msgstr "Templat"
 
+msgid "Test data"
+msgstr "Uji data"
+
 msgid "Test if any of `subs` strings is present in the `url` path."
 msgstr "Uji apakah ada string `subs` di jalur `url`."
 
@@ -6361,6 +7160,18 @@ msgstr ""
 "memungkinkan sebagian besar layanan yang didukung oleh Horizon dikelola, "
 "lihat :ref:`local-conf`"
 
+msgid ""
+"The Django message catalog is injected into the front-end. The gettext "
+"function is available as a global function so you can just use it directly. "
+"If you are writing AngularJS code, we prefer that you use the gettext "
+"service, which is essentially a wrapper around the gettext function."
+msgstr ""
+"Katalog pesan Django disuntikkan (injected) ke front-end. Fungsi gettext "
+"tersedia sebagai fungsi global sehingga Anda bisa menggunakannya secara "
+"langsung. Jika Anda menulis kode AngularJS, kami lebih suka Anda menggunakan "
+"layanan gettext, yang pada dasarnya adalah pembungkus di sekitar fungsi "
+"gettext."
+
 msgid "The Forms Module"
 msgstr "Forms Module"
 
@@ -6556,6 +7367,19 @@ msgstr ""
 "Direktori ``openstack_dashboard`` berisi referensi proyek Django yang "
 "menggunakan ``horizon``."
 
+msgid ""
+"The ``panel.py`` file referenced above has a special meaning. Within a "
+"dashboard, any module name listed in the ``panels`` attribute on the "
+"dashboard class will be auto-discovered by looking for the ``panel.py`` file "
+"in a corresponding directory (the details are a bit magical, but have been "
+"thoroughly vetted in Django's admin codebase)."
+msgstr ""
+"File ``panel.py`` yang dirujuk di atas memiliki arti khusus. Di dalam "
+"dasbor, setiap nama modul yang tercantum dalam atribut ``panel`` pada kelas "
+"dasbor akan ditemukan secara otomatis dengan mencari file ``panel.py`` di "
+"direktori yang sesuai (detailnya agak ajaib, tetapi telah diperiksa secara "
+"menyeluruh dalam basis kode admin Django)."
+
 msgid ""
 "The ``panels`` attribute can be either a flat list containing the name of "
 "each panel **module**  which should be loaded as part of this dashboard, or "
@@ -6609,6 +7433,14 @@ msgstr ""
 "Tindakan harus mengembalikan pengalihan HTTP jika berhasil, atau nilai yang "
 "mengevaluasi menjadi ``False`` jika tidak berhasil."
 
+msgid ""
+"The action specified above will default the ``filter_type`` to be ``\"query"
+"\"``. This means that the filter will use the client side table sorter."
+msgstr ""
+"Tindakan (action) yang ditentukan di atas akan default ``filter_type`` "
+"menjadi ``\"query\"``. Ini berarti bahwa filter akan menggunakan penyortir "
+"tabel sisi klien."
+
 msgid ""
 "The actions are rendered using the current row data. If `row` is True, the "
 "actions are rendered in a row of buttons. Otherwise they are rendered in a "
@@ -6627,9 +7459,29 @@ msgstr ""
 "``form_field_attributes={'class': 'bold_input_field'}``. Defaults ke "
 "``None``."
 
+msgid ""
+"The annotations in the example above are guaranteed to work. However, not "
+"all of the angular-gettext annotations are supported because we wrote our "
+"own custom babel extractor. If you need support for the annotations, ask on "
+"IRC in the **#openstack-horizon** room or report a bug. Also note that you "
+"should avoid embedding HTML fragments in your texts because it makes it "
+"harder to translate. Use your best judgement if you absolutely need to "
+"include HTML."
+msgstr ""
+"Anotasi dalam contoh di atas dijamin berfungsi. Namun, tidak semua anotasi "
+"angular-gettext didukung karena kami menulis ekstraktor babel kustom kami "
+"sendiri. Jika Anda memerlukan dukungan untuk anotasi, tanyakan IRC di ruang "
+"**#openstack-horizon**  atau laporkan bug. Perhatikan juga bahwa Anda harus "
+"menghindari menyisipkan fragmen HTML ke dalam teks Anda karena itu membuat "
+"penerjemahan menjadi lebih sulit. Gunakan penilaian terbaik Anda jika Anda "
+"benar-benar perlu memasukkan HTML."
+
 msgid "The auto-generated URLconf for horizon. Usage::"
 msgstr "URLconf yang dibuat secara otomatis untuk horizon. Usage::"
 
+msgid "The auto-generated ``urls.py`` file is like::"
+msgstr "File ``urls.py`` auto-generated seperti::"
+
 msgid ""
 "The automatic update interval is configurable by setting the key "
 "``ajax_poll_interval`` in the ``HORIZON_CONFIG`` dictionary. Default: "
@@ -6789,6 +7641,13 @@ msgstr ""
 msgid "The community's guidelines for etiquette are fairly simple:"
 msgstr "Pedoman etiket komunitas cukup sederhana:"
 
+msgid "The completed ``dashboard.py`` file should look like the following::"
+msgstr ""
+"File ``dashboard.py`` yang telah selesai akan terlihat seperti berikut::"
+
+msgid "The completed ``tables.py`` file should look like the following::"
+msgstr "File ``tables.py`` yang sudah selesai akan terlihat seperti berikut::"
+
 msgid ""
 "The connections between this step's fields and changes in the context data "
 "(e.g. if that piece of data changes, what needs to be updated in this step)."
@@ -6803,6 +7662,17 @@ msgstr ""
 "Kelas inti yang mendefinisikan struktur tingkat tinggi dari tabel yang "
 "diwakili. Contoh::"
 
+msgid ""
+"The coverage reports may be found in the 'cover' directory. There's a "
+"subdirectory for horizon and openstack_dashboard, and then under a directory "
+"for the browser used to run the tests you should find an ``index.html``. "
+"This can then be viewed to see the coverage details."
+msgstr ""
+"Laporan liputan dapat ditemukan di direktori 'cover'. Ada subdirektori untuk "
+"horizon dan openstack_dashboard, dan kemudian di bawah direktori untuk "
+"browser yang digunakan untuk menjalankan tes Anda harus menemukan ``index."
+"html``. Ini kemudian dapat dilihat untuk melihat detail liputan."
+
 msgid ""
 "The data object is looked up from the table's dataset and the data which "
 "matches the ``lookup`` parameter specified. An error will be raised if the "
@@ -6943,9 +7813,25 @@ msgstr ""
 "atau tidak. Defaultnya adalah ``True``. Ini berguna ketika pilihan perlu "
 "ditampilkan secara kondisional."
 
+msgid ""
+"The first step is to mark untranslated strings so that the extractor is able "
+"to locate them. Refer to the guide below on how to use translation and what "
+"these markers look like."
+msgstr ""
+"Langkah pertama adalah menandai string yang tidak diterjemahkan sehingga "
+"extractor dapat menemukannya. Lihat panduan di bawah ini tentang cara "
+"menggunakan terjemahan dan seperti apa bentuk marker ini."
+
 msgid "The first value is the filter parameter."
 msgstr "Nilai pertama adalah parameter filter."
 
+msgid ""
+"The following is a complex example of how data is exchanged between urls, "
+"views, workflows and templates:"
+msgstr ""
+"Berikut ini adalah contoh kompleks tentang bagaimana data dipertukarkan "
+"antara url, tampilan, alur kerja, dan template:"
+
 msgid ""
 "The following is more example to run a specific test class and a specific "
 "test:"
@@ -7059,6 +7945,22 @@ msgstr ""
 "Kelas :class:`~horizon.tables.DataTable`  ada sehingga Anda tidak perlu "
 "menemukan kembali roda (wheel)  setiap kali."
 
+msgid ""
+"The method is actually being called *multiple times*. Since mox uses a call "
+"stack internally, it simply pops off the expected method calls to verify "
+"them. That means once a call is used once, it's gone. An easy way to see if "
+"this is the case is simply to copy and paste your method call a second time "
+"to see if the error changes. If it does, that means your method is being "
+"called more times than you think it is."
+msgstr ""
+"Metode ini sebenarnya disebut *multiple times*. Karena mox menggunakan "
+"tumpukan panggilan secara internal, ia hanya memunculkan panggilan metode "
+"yang diharapkan untuk memverifikasinya. Itu berarti sekali panggilan "
+"digunakan sekali, itu hilang. Cara mudah untuk melihat apakah ini masalahnya "
+"adalah dengan menyalin dan menempelkan panggilan metode Anda untuk kedua "
+"kalinya untuk melihat apakah kesalahannya berubah. Jika ya, itu berarti "
+"metode Anda dipanggil lebih dari yang Anda pikirkan."
+
 msgid ""
 "The method is largely meant for internal use, but if you want to override it "
 "to provide custom behavior you can do so at your own risk."
@@ -7291,6 +8193,22 @@ msgstr ""
 "aturan untuk menegakkan dari file kebijakan yang ditentukan oleh ruang "
 "lingkup. Contoh tuple adalah ::"
 
+msgid ""
+"The pseudo translation tool can be used to verify that code is ready to be "
+"translated. The pseudo tool replaces a language's translation with a "
+"complete, fake translation. Then you can verify that your code properly "
+"displays fake translations to validate that your code is ready for "
+"translation."
+msgstr ""
+"Alat terjemahan semu dapat digunakan untuk memverifikasi bahwa kode siap "
+"diterjemahkan. Alat semu ini menggantikan terjemahan bahasa dengan "
+"terjemahan palsu yang lengkap. Kemudian Anda dapat memverifikasi bahwa kode "
+"Anda menampilkan terjemahan palsu dengan benar untuk memvalidasi bahwa kode "
+"Anda siap untuk terjemahan."
+
+msgid "The quick version"
+msgstr "Versi cepat"
+
 msgid ""
 "The region will be switched if the given region is one of the regions "
 "available for the scoped project. Otherwise the region is not switched."
@@ -7639,6 +8557,11 @@ msgstr ""
 msgid "Then you add a single line to your project's ``urls.py``"
 msgstr "Kemudian Anda menambahkan satu baris ke proyek Anda ``urls.py``"
 
+msgid "Then, we add that action to the table actions for our table.::"
+msgstr ""
+"Kemudian, kami menambahkan action itu ke tindakan tabel (table action) untuk "
+"tabel kami. ::"
+
 msgid ""
 "There are a few settings that must be in place for the Horizon policy engine "
 "to work."
@@ -7655,6 +8578,19 @@ msgstr ""
 "https://github.com/django/django/blob/master/django/template/defaultfilters."
 "py"
 
+msgid ""
+"There are a number of typical (and non-obvious) ways to break the unit "
+"tests. Some common things to look for:"
+msgstr ""
+"Ada sejumlah cara khas (dan non-obvious) untuk memecahkan tes unit. Beberapa "
+"hal umum yang harus dicari:"
+
+msgid ""
+"There are also additional actions which are extensions of the basic Action "
+"classes:"
+msgstr ""
+"Ada juga tindakan tambahan yang merupakan ekstensi dari basic Action classes:"
+
 msgid ""
 "There are basically 3 things that need to be defined in the table in order "
 "to enable in-line editing."
@@ -7662,6 +8598,13 @@ msgstr ""
 "Pada dasarnya ada 3 hal yang perlu didefinisikan dalam tabel untuk "
 "memungkinkan pengeditan in-line."
 
+msgid ""
+"There are lots of pre-built class-based views in horizon. We try to provide "
+"the starting points for all the common combinations of components."
+msgstr ""
+"Ada banyak pre-built class-based view di horizon. Kami mencoba memberikan "
+"titik awal (starting point) untuk semua kombinasi komponen yang umum."
+
 msgid "There are multiple components in our JavaScript testing framework:"
 msgstr "Ada beberapa komponen dalam kerangka pengujian JavaScript kami:"
 
@@ -7679,6 +8622,25 @@ msgstr ""
 "tindakan ini dan memberikan penanganan kesalahan yang konsisten, pencatatan, "
 "dan interaksi yang dihadapi pengguna."
 
+msgid ""
+"There are several things going on here... we created a table subclass, and "
+"defined four columns that we want to retrieve data and display. Each of "
+"those columns defines what attribute it accesses on the instance object as "
+"the first argument, and since we like to make everything translatable, we "
+"give each column a ``verbose_name`` that's marked for translation."
+msgstr ""
+"Ada beberapa hal yang terjadi di sini ... kami membuat subkelas tabel, dan "
+"mendefinisikan empat kolom yang ingin kami ambil data dan tampilan. Masing-"
+"masing kolom menentukan atribut apa yang diaksesnya pada objek instance "
+"sebagai argumen pertama, dan karena kami ingin membuat semuanya "
+"diterjemahkan, kami memberikan setiap kolom ``verbose_name`` yang ditandai "
+"untuk terjemahan."
+
+msgid ""
+"There are three main types of tests, each with their associated pros and "
+"cons:"
+msgstr "Ada tiga jenis tes utama, masing-masing dengan pro dan kontra terkait:"
+
 msgid ""
 "There are two points in the request-response cycle in which actions can take "
 "place; prior to data being loaded into the table, and after the data is "
@@ -7697,6 +8659,22 @@ msgstr ""
 "Ada juga tampilan berbasis kelas generik yang berguna dan sederhana untuk "
 "menangani tampilan dari kelas :class:`~horizon.tabs.TabGroup` ."
 
+msgid ""
+"These are generally also isolated tests, though sometimes they may interact "
+"with other services running locally. The key difference between functional "
+"tests and unit tests, however, is that functional tests are written from the "
+"perspective of the user (who knows nothing about the code) and only knows "
+"what they put in and what they get back. Essentially this is a higher-level "
+"testing of \"does the result match the spec?\"."
+msgstr ""
+"Ini umumnya juga merupakan tes yang terisolasi, meskipun terkadang mereka "
+"dapat berinteraksi dengan layanan lain yang berjalan secara lokal. Perbedaan "
+"utama antara tes fungsional dan tes unit, adalah bahwa tes fungsional "
+"ditulis dari sudut pandang pengguna (yang tidak tahu apa-apa tentang kode) "
+"dan hanya tahu apa yang mereka masukkan dan apa yang mereka dapatkan "
+"kembali. Pada dasarnya ini adalah pengujian tingkat lebih tinggi dari  "
+"\"does the result match the spec?\"."
+
 msgid ""
 "These are isolated, stand-alone tests with no external dependencies. They "
 "are written from the perspective of \"knowing the code\", and test the "
@@ -7735,6 +8713,14 @@ msgstr ""
 "Mereka menghargai komunitas pengembang dan pengguna yang sehat, bersemangat, "
 "dan aktif."
 
+msgid ""
+"Think long and hard about what you really want to verify in your unit test. "
+"In particular, think about what custom logic your code executes."
+msgstr ""
+"Pikirkan panjang dan keras tentang apa yang benar-benar ingin Anda "
+"verifikasi dalam pengujian unit Anda. Secara khusus, pikirkan logika kustom "
+"apa yang dijalankan oleh kode Anda."
+
 msgid "This action should not require user input on a per-object basis."
 msgstr ""
 "Tindakan ini seharusnya tidak memerlukan input pengguna pada basis per-objek."
@@ -7905,6 +8891,14 @@ msgstr ""
 "Ini adalah daftar test environments yang tersedia untuk dijalankan oleh "
 "``tox -e <name>``."
 
+msgid ""
+"This is a slight simplification from the reality of how the instance object "
+"is actually structured. In reality, accessing other attributes requires an "
+"additional step."
+msgstr ""
+"Ini sedikit penyederhanaan dari kenyataan bagaimana objek contoh sebenarnya "
+"terstruktur. Pada saat menerima, atribut diakses diperlukan langkah tambahan."
+
 msgid ""
 "This is a special flavor of FileField which is meant to be used in cases "
 "when instead of uploading file to Django it should be uploaded to some "
@@ -7975,6 +8969,15 @@ msgstr ""
 "Ini berguna ketika Anda ingin kesalahan API muncul sebagai kesalahan pada "
 "formulir daripada menggunakan kerangka pesan."
 
+msgid ""
+"This layer of testing involves testing all of the components that your "
+"codebase interacts with or relies on in conjunction. This is equivalent to "
+"\"live\" testing, but in a repeatable manner."
+msgstr ""
+"Lapisan pengujian ini melibatkan pengujian semua komponen yang berinteraksi "
+"atau bergantung pada basis kode Anda bersamaan. Ini sama dengan pengujian "
+"\"live\", tetapi dengan cara yang berulang."
+
 msgid "This log can includes information below:"
 msgstr "Log ini dapat mencakup informasi di bawah ini:"
 
@@ -8034,6 +9037,34 @@ msgstr ""
 "Kelas mixin ini akan digunakan bersama dengan kelas ModalFormView dan "
 "WorkflowView untuk menambahkannya dengan data konteks modal_backdrop."
 
+msgid ""
+"This occurs when you stubbed out a piece of code, and it was subsequently "
+"called in a way that you didn't specify it would be. There are two reasons "
+"this tends to come up:"
+msgstr ""
+"Ini terjadi ketika Anda mematikan sepotong kode, dan selanjutnya dipanggil "
+"dengan cara yang tidak Anda tentukan. Ada dua alasan mengapa hal ini "
+"cenderung muncul:"
+
+msgid ""
+"This one is the opposite of the unexpected method call. This one means you "
+"told mox to expect a call and it didn't happen. This is almost always the "
+"result of an error in the conditions of the test. Using the :meth:"
+"`~openstack_dashboard.test.helpers.TestCase.assertNoFormErrors` and :meth:"
+"`~horizon.test.helpers.TestCase.assertMessageCount` will make it readily "
+"apparent what the problem is in the majority of cases. If not, then use "
+"``pdb`` and start interrupting the code flow to see where things are getting "
+"off track."
+msgstr ""
+"Ini adalah kebalikan dari pemanggilan metode yang tidak terduga. Yang ini "
+"berarti Anda memberi tahu mox untuk menunggu panggilan dan itu tidak "
+"terjadi. Ini hampir selalu merupakan hasil dari kesalahan dalam kondisi "
+"pengujian. Menggunakan :meth:`~openstack_dashboard.test.helpers.TestCase."
+"assertNoFormErrors` dan :meth:`~horizon.test.helpers.TestCase."
+"assertMessageCount` akan membuatnya jelas apa masalahnya dalam sebagian "
+"besar kasus. Jika tidak, maka gunakan ``pdb`` dan mulailah menginterupsi "
+"aliran kode untuk melihat di mana segala sesuatunya keluar jalur."
+
 msgid ""
 "This optional static method can be used to specify conditions that need to "
 "be satisfied to load this panel. Unlike ``permissions`` and ``allowed`` this "
@@ -8156,6 +9187,39 @@ msgstr ""
 "digunakan untuk perbandingan dengan penyedia layanan. Seharusnya tidak "
 "bertentangan dengan id penyedia layanan."
 
+msgid ""
+"This tab gets a little more complicated. The tab handles data tables (and "
+"all their associated features), and it also uses the ``preload`` attribute "
+"to specify that this tab shouldn't be loaded by default. It will instead be "
+"loaded via AJAX when someone clicks on it, saving us on API calls in the "
+"vast majority of cases."
+msgstr ""
+"Tab ini menjadi sedikit lebih rumit. Tab menangani tabel data (dan semua "
+"fitur terkait), dan juga menggunakan atribut ``preload`` untuk menentukan "
+"bahwa tab ini tidak boleh dimuat secara default. Sebagai gantinya itu akan "
+"dimuat melalui AJAX ketika seseorang mengkliknya, menyelamatkan kami dari "
+"panggilan API di sebagian besar kasus."
+
+msgid ""
+"This tutorial assumes you have either a ``devstack`` or ``openstack`` "
+"environment up and running.  There are a variety of other resources which "
+"may be helpful to read first.  For example, you may want to start with the :"
+"ref:`quickstart` or the `Django tutorial`_."
+msgstr ""
+"Tutorial ini mengasumsikan Anda memiliki lingkungan ``devstack`` atau "
+"``openstack`` dan berjalan. Ada berbagai sumber daya lain yang mungkin "
+"bermanfaat untuk dibaca terlebih dahulu. Sebagai contoh, Anda mungkin ingin "
+"memulai dengan :ref: `quickstart` atau`Django tutorial`_."
+
+msgid ""
+"This tutorial covers how to use the various components in horizon to build "
+"an example dashboard and a panel with a tab which has a table containing "
+"data from the back end."
+msgstr ""
+"Tutorial ini mencakup cara menggunakan berbagai komponen di horizon untuk "
+"membuat contoh dasbor dan panel dengan tab yang memiliki tabel berisi data "
+"dari back end."
+
 msgid ""
 "This view handles selecting specific tabs and deals with AJAX requests "
 "gracefully."
@@ -8206,6 +9270,9 @@ msgstr ""
 msgid "Timezone-aware checking of the auth token's expiration timestamp."
 msgstr "Pemeriksaan timezone-aware terhadap timestamp kedaluwarsa token."
 
+msgid "Tips and tricks"
+msgstr "Kiat dan trik"
+
 msgid ""
 "To add a new dashboard to your project, you need to add a configuration file "
 "to ``openstack_dashboard/local/enabled`` directory. For more information on "
@@ -8304,6 +9371,28 @@ msgstr ""
 msgid "To make a new release of the package, you need to:"
 msgstr "Untuk membuat rilis baru paket, Anda perlu:"
 
+msgid ""
+"To make your life even easier, if your codebase doesn't have a built-in ORM-"
+"like function to manage your test data you can consider building (or "
+"borrowing) one yourself. Being able to do simple retrieval queries on your "
+"test data is incredibly valuable."
+msgstr ""
+"Untuk membuat hidup Anda lebih mudah, jika basis kode Anda tidak memiliki "
+"built-in ORM-like function untuk mengelola data pengujian Anda, Anda dapat "
+"mempertimbangkan untuk membangun (atau meminjam) sendiri. Mampu melakukan "
+"kueri pengambilan sederhana pada data pengujian Anda sangat berharga."
+
+msgid ""
+"To make your strings translatable, you need to mark it so that horizon can "
+"locate and extract it into a POT file. When a user from another locale "
+"visits your page, your string is replaced with the correct translated "
+"version."
+msgstr ""
+"Untuk membuat string Anda dapat diterjemahkan, Anda harus menandainya "
+"sehingga horizon dapat menemukan dan mengekstraknya ke file POT. Ketika "
+"pengguna dari lokal lain mengunjungi halaman Anda, string Anda diganti "
+"dengan versi terjemahan yang benar."
+
 msgid ""
 "To manually add files, add the following arrays and file paths to the "
 "enabled file: ::"
@@ -8339,6 +9428,69 @@ msgstr ""
 "`Installing MongoDB`_.  Kemudian, ubah kunci ``bindIp`` di  ``/etc/mongod."
 "conf``  menjadi ``0.0.0.0`` dan panggil ``sudo service mongod restart``."
 
+msgid ""
+"To that end, Horizon includes several custom assertions to make these tasks "
+"easier. :meth:`~openstack_dashboard.test.helpers.TestCase."
+"assertNoFormErrors`, :meth:`~horizon.test.helpers.TestCase."
+"assertMessageCount`, and :meth:`~horizon.test.helpers.TestCase."
+"assertNoMessages` all exist for exactly these purposes. Moreover, they "
+"provide useful output when things go wrong so you're not left scratching "
+"your head wondering why your view test didn't redirect as expected when you "
+"posted a form."
+msgstr ""
+"Untuk itu, Horizon menyertakan beberapa pernyataan khusus untuk mempermudah "
+"tugas-tugas ini. :meth:`~openstack_dashboard.test.helpers.TestCase."
+"assertNoFormErrors`, :meth:`~horizon.test.helpers.TestCase."
+"assertMessageCount`, dan  :meth:`~horizon.test.helpers.TestCase."
+"assertNoMessages` semua ada untuk tujuan ini. Selain itu, mereka memberikan "
+"hasil yang bermanfaat ketika terjadi kesalahan sehingga Anda tidak perlu "
+"menggaruk kepala bertanya-tanya mengapa uji tampilan Anda tidak mengarahkan "
+"seperti yang diharapkan ketika Anda memposting formulir."
+
+msgid ""
+"To translate a string, simply wrap one of the gettext variants around the "
+"string. The examples below show you how to do translation for various "
+"scenarios, such as interpolation, contextual markers and translation "
+"comments."
+msgstr ""
+"Untuk menerjemahkan string, cukup bungkus (wrap) salah satu varian gettext "
+"di sekitar string. Contoh di bawah ini menunjukkan kepada Anda bagaimana "
+"melakukan terjemahan untuk berbagai skenario, seperti interpolasi, penanda "
+"kontekstual dan komentar terjemahan."
+
+msgid ""
+"To update the .po files, you can run ``tox -e manage -- update_catalog`` to "
+"update the .po file for every language, or you can specify a specific "
+"language to update like this: ``tox -e manage -- update_catalog de``. This "
+"is useful if you want to add a few extra translatabale strings for a "
+"downstream customisation."
+msgstr ""
+"Untuk memperbarui file .po, Anda dapat menjalankan  ``tox -e manage -- "
+"update_catalog`` untuk memperbarui file .po untuk setiap bahasa, atau Anda "
+"dapat menentukan bahasa tertentu untuk diperbarui seperti ini: ``tox -e "
+"manage -- update_catalog de``. Ini berguna jika Anda ingin menambahkan "
+"beberapa string translatabale tambahan untuk kustomisasi hilir."
+
+msgid ""
+"To use translation in your AngularJS template, use the translate tag or the "
+"translate filter. Note that we are using `angular-gettext <https://angular-"
+"gettext.rocketeer.be/>`_ for message substitution but not for message "
+"extraction."
+msgstr ""
+"Untuk menggunakan terjemahan dalam template AngularJS Anda, gunakan tag "
+"terjemahan atau filter terjemahan. Perhatikan bahwa kita menggunakan "
+"`angular-gettext <https://angular-gettext.rocketeer.be/>` _ untuk substitusi "
+"pesan tetapi tidak untuk ekstraksi pesan."
+
+msgid ""
+"To use translation in your template, make sure you load the i18n module. To "
+"translate a line of text, use the ``trans`` template tag. If you need to "
+"translate a block of text, use the ``blocktrans`` template tag."
+msgstr ""
+"Untuk menggunakan terjemahan dalam templat Anda, pastikan Anda memuat modul "
+"i18n. Untuk menerjemahkan satu baris teks, gunakan tag templat ``trans``. "
+"Jika Anda perlu menerjemahkan blok teks, gunakan tag template ``blocktrans``."
+
 msgid ""
 "Token object provides a consistent interface for accessing the keystone "
 "token information and service catalog."
@@ -8352,6 +9504,9 @@ msgstr "Panduan Topik"
 msgid "Translation (Internationalization and Localization)"
 msgstr "Terjemahan (Internasionalisasi dan Pelokalan)"
 
+msgid "Translation in Horizon"
+msgstr "Terjemahan di Horizon"
+
 msgid "Treat everyone respectfully and professionally."
 msgstr "Perlakukan semua orang dengan hormat dan profesional."
 
@@ -8362,6 +9517,12 @@ msgstr ""
 "Tuples dalam daftar akan memiliki izin yang diperlukan jika pengguna "
 "memiliki izin yang cocok dengan salah satu elemen tupel itu"
 
+msgid "Tutorial: Building a Dashboard using Horizon"
+msgstr "Tutorial: Membangun Dashboard menggunakan Horizon"
+
+msgid "Tying it together in a view"
+msgstr "Mengikatnya bersama dalam tampilan (view)"
+
 msgid "URLs"
 msgstr "URLs"
 
@@ -8374,6 +9535,15 @@ msgstr ""
 "menyentuh kode, tetapi jika kita mendapatkan semua tujuan lain maka kita "
 "bebas untuk fokus pada pengalaman terbaik."
 
+msgid "Understanding the output from ``mox``"
+msgstr "Memahami output dari ``mox``"
+
+msgid "Unexpected Method Call"
+msgstr "Panggilan Metode Tak Terduga"
+
+msgid "Unit tests"
+msgstr "Tes unit"
+
 msgid "Unlike NON_FIELD_ERRORS, this doesn't fail form validation."
 msgstr "Tidak seperti NON_FIELD_ERRORS, ini tidak gagal validasi form."
 
@@ -8416,9 +9586,52 @@ msgstr ""
 msgid "Use 2 spaces for code indentation."
 msgstr "Gunakan 2 spasi untuk indentasi kode."
 
+msgid ""
+"Use :meth:`~horizon.test.helpers.TestCase.assertMessageCount` and :meth:"
+"`~horizon.test.helpers.TestCase.assertNoMessages` when a piece of code is "
+"failing inexplicably. Since the core error handlers attach user-facing error "
+"messages (and since the core logging is silenced during test runs) these "
+"methods give you the dual benefit of verifying the output you expect while "
+"clearly showing you the problematic error message if they fail."
+msgstr ""
+"Gunakan :meth: `~ horizon.test.helpers.TestCase.assertMessageCount` dan :"
+"meth:` ~ horizon.test.helpers.TestCase.assertNoMessages` saat sepotong kode "
+"gagal dijelaskan secara tidak dapat dijelaskan. Karena penangan kesalahan "
+"inti melampirkan pesan kesalahan yang dihadapi pengguna (dan karena "
+"pencatatan inti dibungkam selama pengujian berjalan) metode ini memberi Anda "
+"manfaat ganda memverifikasi keluaran yang Anda harapkan sambil dengan jelas "
+"menunjukkan kepada Anda pesan kesalahan yang bermasalah jika gagal."
+
+msgid ""
+"Use :meth:`~openstack_dashboard.test.helpers.TestCase.assertNoFormErrors` "
+"immediately after your ``client.post`` call for tests that handle form "
+"views. This will immediately fail if your form POST failed due to a "
+"validation error and tell you what the error was."
+msgstr ""
+"Gunakan :meth: `~ openstack_dashboard.test.helpers.TestCase."
+"assertNoFormErrors` segera setelah panggilan ``client.post`` Anda untuk "
+"pengujian yang menangani tampilan formulir. Ini akan segera gagal jika "
+"formulir POST Anda gagal karena kesalahan validasi dan memberi tahu Anda apa "
+"kesalahannya."
+
 msgid "Use ESLint in your development environment."
 msgstr "Gunakan ESLint di lingkungan pengembangan Anda."
 
+msgid ""
+"Use Python's ``pdb`` module liberally. Many people don't realize it works "
+"just as well in a test case as it does in a live view. Simply inserting "
+"``import pdb; pdb.set_trace()`` anywhere in your codebase will drop the "
+"interpreter into an interactive shell so you can explore your test "
+"environment and see which of your assumptions about the code isn't, in fact, "
+"flawlessly correct."
+msgstr ""
+"Gunakan modul ``pdb`` Python secara bebas. Banyak orang tidak menyadari itu "
+"berfungsi dengan baik dalam kasus uji seperti halnya dalam tampilan "
+"langsung. Cukup masukkan ``import pdb; pdb.set_trace()`` di mana pun di "
+"basis kode Anda akan menjatuhkan penerjemah ke shell interaktif sehingga "
+"Anda dapat menjelajahi lingkungan pengujian Anda dan melihat asumsi Anda "
+"tentang kode yang sebenarnya tidak benar sempurna."
+
 msgid ""
 "Use ``===`` as opposed to ``==`` for equality checks. The ``==`` will do a "
 "type cast before comparing, which can lead to unwanted results."
@@ -8442,6 +9655,15 @@ msgstr ""
 "Gunakan pernyataan ``{ }`` untuk ``if``, ``for``, ``while`` dan jangan "
 "gabungkan dalam satu baris. ::"
 
+msgid ""
+"Use a single, consistent set of test data. Grow it over time, but do "
+"everything you can not to fragment it. It quickly becomes unmaintainable and "
+"perniciously out-of-sync with reality."
+msgstr ""
+"Gunakan satu set, data uji yang konsisten. Tumbuhkan dari waktu ke waktu, "
+"tetapi lakukan segala yang Anda bisa untuk tidak memecahnya. Dengan cepat "
+"menjadi tidak dapat dipelihara dan tidak sinkron dengan kenyataan."
+
 msgid ""
 "Use proper grammar, spelling, capitalization and punctuation at all times."
 msgstr ""
@@ -8506,6 +9728,13 @@ msgstr "Nilai dibandingkan dengan cara case-insensitive."
 msgid "Verifies that all required data is present in the context."
 msgstr "Memverifikasi bahwa semua data yang diperlukan ada dalam konteks."
 
+msgid ""
+"Verifies things from an \"end user\" perspective, which helps to ensure a "
+"high-quality experience."
+msgstr ""
+"Memverifikasi hal-hal dari perspektif  \"end user\", yang membantu "
+"memastikan pengalaman berkualitas tinggi."
+
 msgid ""
 "Verifying/validating the overall data integrity and subsequently triggering "
 "the final method to complete the workflow."
@@ -8570,6 +9799,9 @@ msgstr ""
 "Kami akan mengonversi id objek dan ``lookup`` ke unicode sebelum "
 "perbandingan."
 
+msgid "We'll create a panel and call it ``My Panel``."
+msgstr "Kami akan membuat panel dan menyebutnya ``My Panel``."
+
 msgid ""
 "We'll start by assuming you've got a working checkout of the repository (if "
 "not then please see the :ref:`quickstart`)."
@@ -8577,16 +9809,29 @@ msgstr ""
 "Kami akan mulai dengan mengasumsikan Anda sudah memiliki checkout yang baik "
 "di repositori (jika tidak, silakan lihat :ref: `quickstart`)."
 
+msgid ""
+"We'll start with the table, combine that with the tabs, and then build our "
+"view from the pieces."
+msgstr ""
+"Kami akan mulai dengan tabel, menggabungkan itu dengan tab, dan kemudian "
+"membangun tampilan (view) kami dari potongan."
+
 msgid "Websso is supported in Keystone version 3."
 msgstr "Websso didukung dalam Keystone versi 3."
 
 msgid "What does this mean for visual design?"
 msgstr "Apa artinya ini untuk desain visual?"
 
+msgid "What is the point of translating my code?"
+msgstr "Apa gunanya menerjemahkan kode saya?"
+
 msgid ""
 "What is the relationship between ``Dashboards``, ``Panels``, and navigation?"
 msgstr "Apa hubungan antara  ``Dashboards``, ``Panels``, dan navigasi?"
 
+msgid "What makes a good unit test?"
+msgstr "Apa yang membuat unit test bagus?"
+
 msgid "When actions get run"
 msgstr "Ketika tindakan dijalankan"
 
@@ -8611,6 +9856,13 @@ msgstr ""
 "Ketika dipanggil untuk aksi baris, objek data baris saat ini akan dilewatkan "
 "sebagai parameter pertama."
 
+msgid ""
+"When defining the expected input to a stubbed call, make sure the arguments "
+"are *identical*, this includes ``str`` vs. ``int`` differences."
+msgstr ""
+"Ketika mendefinisikan input yang diharapkan untuk panggilan yang terhenti, "
+"pastikan argumennya *identical*, ini termasuk perbedaan ``str`` vs ``int``."
+
 msgid ""
 "When deriving the :class:`horizon.tables.Action` class for use in a table, "
 "if a policy check is desired for a particular target, the implementer should "
@@ -8636,6 +9888,18 @@ msgstr ""
 "Ketika pengulangan (iterated), instance ``Row`` akan menghasilkan masing-"
 "masing selnya."
 
+msgid ""
+"When pushing code upstream, the only requirement is to mark the strings "
+"correctly. All creation of POT and PO files is handled by a daily upstream "
+"job. Further information can be found in the `translation infrastructure "
+"documentation <https://docs.openstack.org/i18n/latest/infra.html>`_."
+msgstr ""
+"Saat mendorong kode ke atas, satu-satunya persyaratan adalah menandai string "
+"dengan benar. Semua pembuatan file POT dan PO ditangani oleh pekerjaan hulu "
+"harian. Informasi lebih lanjut dapat ditemukan di `translation "
+"infrastructure documentation <https://docs.openstack.org/i18n/latest/infra."
+"html>`_."
+
 msgid "When returning, the loaded data is set on the tables."
 msgstr "Saat kembali, data yang dimuat diatur pada tabel."
 
@@ -8668,6 +9932,22 @@ msgstr ""
 "Ketika daftar kosong dan atribut ``link`` bukan None, semua baris di bawah "
 "kolom ini akan menjadi tautan."
 
+msgid ""
+"When writing a new feature, think about writing unit tests to verify the "
+"behavior step-by-step as you write the feature. Every time you'd go to run "
+"your code by hand and verify it manually, think \"could I write a test to do "
+"this instead?\". That way when the feature is done and you're ready to "
+"commit it you've already got a whole set of tests that are more thorough "
+"than anything you'd write after the fact."
+msgstr ""
+"Saat menulis fitur baru, pikirkan tentang menulis unit test untuk "
+"memverifikasi perilaku langkah demi langkah saat Anda menulis fitur. Setiap "
+"kali Anda menjalankan kode Anda dengan tangan dan memverifikasinya secara "
+"manual, pikirkan \"could I write a test to do this instead?\".  Dengan "
+"begitu ketika fitur selesai dan Anda siap untuk melakukan itu, Anda sudah "
+"memiliki seluruh rangkaian tes yang lebih menyeluruh daripada apa pun yang "
+"Anda tulis setelah fakta."
+
 msgid ""
 "Where possible, use Sphinx's cross-reference syntax (e.g. ``:class:`~horizon."
 "foo.Bar``) when referring to other Horizon components. The better-linked our "
@@ -8713,6 +9993,36 @@ msgstr ""
 msgid "Why we use XStatic"
 msgstr "Mengapa kami menggunakan XStatic"
 
+msgid ""
+"Why? Because overuse of mocks can rapidly land you in a situation where "
+"you're not testing any real code. All you've done is verified that your "
+"mocking framework returns what you tell it to. This problem can be very "
+"tricky to recognize, since you may be mocking things in ``setUp`` methods, "
+"other modules, etc."
+msgstr ""
+"Mengapa? Karena terlalu sering mock bisa dengan cepat membuat Anda dalam "
+"situasi di mana Anda tidak menguji kode nyata. Semua yang telah Anda lakukan "
+"diverifikasi bahwa kerangka kerja mocking Anda mengembalikan apa yang Anda "
+"katakan. Masalah ini bisa sangat sulit dikenali, karena Anda mungkin mocking "
+"hal-hal dalam metode ``setUp``, modul lain, dll."
+
+msgid "Will take screenshot of the current page on test fail for easy debug"
+msgstr ""
+"Akan mengambil screenshot dari halaman saat ini pada pengujian gagal untuk "
+"debug mudah"
+
+msgid "Will warn you when changes in external components break your code."
+msgstr ""
+"Akan memperingatkan Anda ketika perubahan komponen eksternal merusak kode "
+"Anda."
+
+msgid ""
+"With the rest of the files and directories in place, we can move on to add "
+"our own dashboard."
+msgstr ""
+"Dengan sisa file dan direktori di tempatnya, kita dapat melanjutkan untuk "
+"menambahkan dasbor kita sendiri."
+
 msgid ""
 "Within the application, there is a simple method for registering a :class:"
 "`~horizon.Panel` (sub-navigation items). Each panel contains the necessary "
@@ -8733,9 +10043,31 @@ msgstr "WorkflowView"
 msgid "Workflows"
 msgstr "Workflows"
 
+msgid "Workflows Topic Guide"
+msgstr "Panduan Topik Alur Kerja"
+
+msgid ""
+"Workflows are complex forms with tabs, each workflow must consist of classes "
+"extending the :class:`~horizon.workflows.Workflow`, :class:`~horizon."
+"workflows.Step` and :class:`~horizon.workflows.Action`"
+msgstr ""
+"Alur kerja adalah bentuk kompleks dengan tab, setiap alur kerja harus "
+"terdiri dari kelas yang memperpanjang :class:`~horizon.workflows.Workflow`, :"
+"class:`~horizon.workflows.Step` dan  :class:`~horizon.workflows.Action`"
+
 msgid "Write documentation!"
 msgstr "Tulis dokumentasi!"
 
+msgid ""
+"Write tests that hit every view in your application. Even if they don't "
+"assert a single thing about the code, it tells you that your users aren't "
+"getting fatal errors just by interacting with your code."
+msgstr ""
+"Tulis tes yang mengenai setiap tampilan di aplikasi Anda. Bahkan jika mereka "
+"tidak menyatakan satu hal pun tentang kode tersebut, ia memberi tahu Anda "
+"bahwa pengguna Anda tidak mendapatkan kesalahan fatal hanya dengan "
+"berinteraksi dengan kode Anda."
+
 msgid "Write unit tests for untested code!"
 msgstr "Tulis tes unit untuk kode yang belum diuji!"
 
@@ -8807,6 +10139,45 @@ msgstr ""
 "seperti ``dnf search foo``, atau ``zypper se -s foo``. `` dnf info foo`` "
 "mengembalikan informasi lebih rinci tentang paket tersebut."
 
+msgid ""
+"You can skip this section if you are only interested in learning how to use "
+"translation. This section explains the two main components to translation: "
+"message extraction and message substitution. We will briefly go over what "
+"each one does for translation as a whole."
+msgstr ""
+"Anda dapat melewati bagian ini jika Anda hanya tertarik mempelajari cara "
+"menggunakan terjemahan. Bagian ini menjelaskan dua komponen utama untuk "
+"terjemahan: ekstraksi pesan dan substitusi pesan. Kami akan membahas secara "
+"singkat apa yang masing-masing lakukan untuk terjemahan secara keseluruhan."
+
+msgid ""
+"You defined the expected call, but a subtle difference crept in. This may be "
+"a string versus integer difference, a string versus unicode difference, a "
+"slightly off date/time, or passing a name instead of an id."
+msgstr ""
+"Anda mendefinisikan panggilan yang diharapkan, tetapi perbedaan yang halus "
+"merayap masuk. Ini mungkin perbedaan string versus integer, string versus "
+"perbedaan kode, date/time yang sedikit tidak aktif, atau meneruskan nama "
+"daripada id."
+
+msgid ""
+"You introduced an awesome piece of code and revel in your glorious "
+"accomplishment. Suddenly your world comes crashing down when a core hands "
+"you a -1 because your code is not translated. What gives?"
+msgstr ""
+"Anda memperkenalkan sepotong kode yang luar biasa dan menikmati pencapaian "
+"gemilang Anda. Tiba-tiba dunia Anda runtuh ketika sebuah core memberi Anda "
+"-1 karena kode Anda tidak diterjemahkan. Apa yang menyebabkannya?"
+
+msgid ""
+"You will notice that the directory ``mydashboard`` gets automatically "
+"populated with the files related to a dashboard and the ``mypanel`` "
+"directory gets automatically populated with the files related to a panel."
+msgstr ""
+"Anda akan melihat bahwa direktori ``mydashboard`` secara otomatis diisi "
+"dengan file yang terkait dengan dasbor dan direktori ``mypanel`` secara "
+"otomatis diisi dengan file yang terkait dengan panel."
+
 msgid ""
 "`Create a new repository under OpenStack`_. Use \"xstatic-core\" and "
 "\"xstatic-ptl\" groups for the ACLs. Make sure to include the ``-pypi-wheel-"
-- 
GitLab