diff --git a/.docker/README.md b/.docker/README.md deleted file mode 100644 index ff4eaed..0000000 --- a/.docker/README.md +++ /dev/null @@ -1,32 +0,0 @@ -## Example docker-compose configuration - -Hello and thank you for giving Kaplan Cloud a try! - -This example configuration assumes that you have -[nginxproxy/nginx-proxy](https://hub.docker.com/r/nginxproxy/nginx-proxy) and, -optionally, [nginxproxy/acme-companion](https://hub.docker.com/r/nginxproxy/acme-companion) -running on the same machine. Please make sure to connect the -nginxproxy/nginx-proxy container to a network, the name of which you'll need -to set to the NETWORK_NAME environment variable in .env. Please see the -.env.template and .env.web.template files for instructions. - -When you're done, run `docker-compose up -d` while in the same directory as docker-compose.yml - -You'll need a superuser (admin) account. -``` -docker-compose exec app python manage.py createsuperuser -``` -Head to subdomain.yourdomain.tld/admin (subsitute subdomain.yourdomain.tld with -the domain you entered for VIRTUAL_HOST) to create accounts for teammates. The -recommended way to invite team members is to create a UserRegistrationToken -which you'll find on the left-hand side of the admin view. The invited team -member then enters their token at deneme.com.tr/accounts/register and their -user permissions are automatically assigned based on the user type you -specified when creating the token. - -Please be advised that only admins, and users assigned to the PM group may -create projects and other resources. - -### Links -1. [Kaplan Cloud docker repository](https://hub.docker.com/r/kaplanpro/cloud) -2. [Kaplan homepage](https://kaplan.pro) diff --git a/.dockerignore b/.dockerignore index a1e73f1..fc5dd48 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,4 @@ -.docker +compose .dockerignore .gitignore .git diff --git a/.env.example b/.env.example index 537cc4c..023b2f8 100644 --- a/.env.example +++ b/.env.example @@ -1,9 +1,48 @@ # Copy this file to .env and fill in SECRET_KEY. # Generate one with: # python -c "import secrets; print(secrets.token_urlsafe(50))" + +# === Required === SECRET_KEY= -# Optional overrides (defaults shown): +# === Core Django === # DEBUG=True # ALLOWED_HOSTS=* # CSRF_TRUSTED_ORIGINS=http://* + +# === Database (defaults to SQLite at BASE_DIR/db.sqlite3) === +# DB_ENGINE=django.db.backends.postgresql +# DB_NAME= +# DB_USER= +# DB_PASSWORD= +# DB_HOST= +# DB_PORT= + +# === Storage backends === +# FILE_STORAGE=django.core.files.storage.FileSystemStorage +# STATICFILES_STORAGE=django.contrib.staticfiles.storage.StaticFilesStorage + +# === S3 (only read when FILE_STORAGE or STATICFILES_STORAGE points at the S3 backend) === +# S3_ACCESS_KEY_ID= +# S3_SECRET_ACCESS_KEY= +# S3_REGION_NAME= +# S3_PUBLIC_BUCKET= +# S3_PRIVATE_BUCKET= +# S3_ENDPOINT_URL= +# S3_CUSTOM_DOMAIN= +# S3_DEFAULT_ACL= +# S3_USE_SSL=True +# S3_PUBLIC_BUCKET_LOCATION=static +# S3_PRIVATE_BUCKET_LOCATION= +# AWS_QUERYSTRING_AUTH=False + +# === Google Cloud Storage (only read when FILE_STORAGE or STATICFILES_STORAGE +# points at storages.backends.gcloud.GoogleCloudStorage; also set +# GOOGLE_APPLICATION_CREDENTIALS to the key file path) === +# GS_PUBLIC_BUCKET_NAME= +# GS_PRIVATE_BUCKET_NAME= +# GS_DEFAULT_ACL= +# GS_CUSTOM_ENDPOINT= +# GS_PUBLIC_BUCKET_LOCATION=static +# GS_PRIVATE_BUCKET_LOCATION= +# GS_QUERYSTRING_AUTH=False diff --git a/CLAUDE.md b/CLAUDE.md index 34b3723..e92b3cb 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -22,7 +22,7 @@ python manage.py runserver 0.0.0.0:8080 For container-based dev use **podman compose** (not `docker compose`): ```bash -cd .docker +cd compose cp .env.template .env && cp .env.web.template .env.web podman compose up -d podman compose exec app python manage.py createsuperuser diff --git a/README.md b/README.md index 1c73cbf..c8d3072 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,45 @@ # Kaplan Cloud -Kaplan Cloud is a cloud-based translation management system. +Kaplan Cloud is a cloud-based translation management system. It handles +translation projects, source and bilingual files, translation memories, +terminology databases, and team collaboration between project managers, +translators, and reviewers. -The official documentation is available at https://docs.kaplan.pro/projects/kaplan-cloud +User-facing documentation is published at +. -## Local installation with Docker +## Quick start (local development) -Please see [here](https://docs.kaplan.pro/projects/kaplan-cloud/en/latest/installation.html#local-installation-with-docker) -for instructions; however, for testing purposes, all you need to do is first -start a [Kaplan Cloud container](https://hub.docker.com/r/kaplanpro/cloud): +Requires Python 3.12+ and [`uv`](https://docs.astral.sh/uv/). SQLite is +used by default, so no separate database setup is needed. -``` -docker run -d \ --p 8080:8080 \ ---restart always \ ---name kaplan-cloud \ -kaplanpro/cloud +```bash +cp .env.example .env # then fill in SECRET_KEY +uv sync +python manage.py migrate +python manage.py runserver 0.0.0.0:8080 ``` -And then create a superuser account: +`.env.example` documents every environment variable `settings.py` +reads — uncomment the ones you need (Postgres, S3, GCS, etc.). -``` -docker exec -it kaplan-cloud python manage.py createsuperuser +## Container deployment + +A reference `podman compose` (or `docker compose`) stack lives in +[`compose/`](compose/README.md). It bundles Postgres, the Gunicorn app +server, and an Nginx static-files sidecar designed to sit behind an +external reverse proxy. + +## Tests and linting + +```bash +python manage.py test +ruff check . +ruff format . ``` -That's it! Head on over to http://0.0.0.0:8080 and explore Kaplan Cloud. +CI runs `ruff check` and the full test suite on every PR. -## Production installation with Docker Compose +## License -Please see [here](https://docs.kaplan.pro/projects/kaplan-cloud/en/latest/installation.html#production-installation-with-docker-compose) -for instructions. +See [`LICENSE`](LICENSE). diff --git a/.docker/.env.template b/compose/.env.template similarity index 100% rename from .docker/.env.template rename to compose/.env.template diff --git a/.docker/.env.web.template b/compose/.env.web.template similarity index 100% rename from .docker/.env.web.template rename to compose/.env.web.template diff --git a/compose/README.md b/compose/README.md new file mode 100644 index 0000000..286fa73 --- /dev/null +++ b/compose/README.md @@ -0,0 +1,47 @@ +# Container deployment + +A reference `compose` setup for running Kaplan Cloud in production with +Postgres, Gunicorn, and an Nginx static-files sidecar. For local +development, see the root [`README.md`](../README.md) instead. + +## Prerequisites + +- `podman` (or `docker`) with a compose plugin. The project's canonical + command is `podman compose`; `docker compose` works identically. +- A reverse proxy in front of this stack to terminate TLS and route + traffic to the `nginx` service. The compose file defaults to the + network used by + [`nginxproxy/nginx-proxy`](https://hub.docker.com/r/nginxproxy/nginx-proxy); + override `NETWORK_NAME` in `.env` if you're using something else. + +## Setup + +From this directory: + +```bash +cp .env.template .env # fill in DB_NAME, DB_USER, DB_PASSWORD, etc. +cp .env.web.template .env.web # set VIRTUAL_HOST +podman compose up -d +podman compose exec app python manage.py createsuperuser +``` + +The Postgres data directory and uploaded project files are bind-mounted +under `./db/data/db` and `./app/projects` respectively, so state persists +across container restarts and image upgrades. + +## Inviting teammates + +Sign in to `/admin` with the superuser account and create a +`UserRegistrationToken` for each new teammate. The token is shown once +and is single-use — share the registration URL +`https:///accounts/register?token=` with the recipient. +Permissions (translator, reviewer, PM) are assigned automatically based +on the user type chosen when the token was created. + +Only admins and members of the `PM` group can create projects, clients, +translation memories, and language profiles. + +## Links + +- [`kaplanpro/cloud` on Docker Hub](https://hub.docker.com/r/kaplanpro/cloud) +- [kaplan.pro](https://kaplan.pro) diff --git a/.docker/docker-compose.yml b/compose/compose.yml similarity index 100% rename from .docker/docker-compose.yml rename to compose/compose.yml diff --git a/.docker/web/default.conf b/compose/web/default.conf similarity index 100% rename from .docker/web/default.conf rename to compose/web/default.conf diff --git a/docs/source/_static/img/assign-team-member-form.png b/docs/source/_static/img/assign-team-member-form.png index e91a2f4..bc0e5a9 100644 Binary files a/docs/source/_static/img/assign-team-member-form.png and b/docs/source/_static/img/assign-team-member-form.png differ diff --git a/docs/source/_static/img/files-context-menu.png b/docs/source/_static/img/files-context-menu.png index 4a45608..1721aac 100644 Binary files a/docs/source/_static/img/files-context-menu.png and b/docs/source/_static/img/files-context-menu.png differ diff --git a/docs/source/_static/img/gcp-cloud-shell-createsuperuser.png b/docs/source/_static/img/gcp-cloud-shell-createsuperuser.png deleted file mode 100644 index 7c6a3c2..0000000 Binary files a/docs/source/_static/img/gcp-cloud-shell-createsuperuser.png and /dev/null differ diff --git a/docs/source/_static/img/gcp-cloud-shell-preview-homepage.png b/docs/source/_static/img/gcp-cloud-shell-preview-homepage.png deleted file mode 100644 index 3703926..0000000 Binary files a/docs/source/_static/img/gcp-cloud-shell-preview-homepage.png and /dev/null differ diff --git a/docs/source/_static/img/gcp-cloud-shell-preview-login.png b/docs/source/_static/img/gcp-cloud-shell-preview-login.png deleted file mode 100644 index 75f1cd8..0000000 Binary files a/docs/source/_static/img/gcp-cloud-shell-preview-login.png and /dev/null differ diff --git a/docs/source/_static/img/gcp-cloud-shell-run-kaplan-cloud.png b/docs/source/_static/img/gcp-cloud-shell-run-kaplan-cloud.png deleted file mode 100644 index cac4905..0000000 Binary files a/docs/source/_static/img/gcp-cloud-shell-run-kaplan-cloud.png and /dev/null differ diff --git a/docs/source/_static/img/gcp-cloud-shell-web-preview-button.png b/docs/source/_static/img/gcp-cloud-shell-web-preview-button.png deleted file mode 100644 index be39d7f..0000000 Binary files a/docs/source/_static/img/gcp-cloud-shell-web-preview-button.png and /dev/null differ diff --git a/docs/source/_static/img/gcp-cloud-shell.png b/docs/source/_static/img/gcp-cloud-shell.png deleted file mode 100644 index 022bc2a..0000000 Binary files a/docs/source/_static/img/gcp-cloud-shell.png and /dev/null differ diff --git a/docs/source/_static/img/project-form.png b/docs/source/_static/img/project-form.png index 32ccbab..8cbf212 100644 Binary files a/docs/source/_static/img/project-form.png and b/docs/source/_static/img/project-form.png differ diff --git a/docs/source/_static/img/projects-tab.png b/docs/source/_static/img/projects-tab.png index 555d335..d8e417f 100644 Binary files a/docs/source/_static/img/projects-tab.png and b/docs/source/_static/img/projects-tab.png differ diff --git a/docs/source/_static/img/team-member-assigned.png b/docs/source/_static/img/team-member-assigned.png index 7b4039c..25331b8 100644 Binary files a/docs/source/_static/img/team-member-assigned.png and b/docs/source/_static/img/team-member-assigned.png differ diff --git a/docs/source/_static/img/translation-memories-tab.png b/docs/source/_static/img/translation-memories-tab.png index 7748d42..e6e9608 100644 Binary files a/docs/source/_static/img/translation-memories-tab.png and b/docs/source/_static/img/translation-memories-tab.png differ diff --git a/docs/source/_static/img/translation-memory-form.png b/docs/source/_static/img/translation-memory-form.png index 49c5360..0eb3c38 100644 Binary files a/docs/source/_static/img/translation-memory-form.png and b/docs/source/_static/img/translation-memory-form.png differ diff --git a/docs/source/_static/img/user-registration-form.png b/docs/source/_static/img/user-registration-form.png index d32de9d..4f4ba1e 100644 Binary files a/docs/source/_static/img/user-registration-form.png and b/docs/source/_static/img/user-registration-form.png differ diff --git a/docs/source/analysis-and-reports.rst b/docs/source/analysis-and-reports.rst new file mode 100644 index 0000000..56cab3b --- /dev/null +++ b/docs/source/analysis-and-reports.rst @@ -0,0 +1,61 @@ +Analysis and reports +==================== + +Project analysis estimates how much work a project contains: total +words, segments, and how many of them are already covered by existing +translation memories (exact and fuzzy matches). PMs trigger analyses +from the project page; results are saved as **reports** that can be +viewed later. + +This page is for project managers and administrators. + +Run an analysis +--------------- + +1. Open the project at ``/project/``. +2. Right-click the file table (or use the dedicated action button) and + pick **Analyze**. You can analyze the selected files or the whole + project if no files are ticked. +3. A new row appears at the top of the **Reports** section in + **Ready for Processing** state. + +The Reports table +----------------- + +The Reports section on the project page lists every analysis ever run +for the project, newest first. Each row has a live status badge: + +- **Blank** — created but not yet queued. +- **Ready for Processing** — queued, waiting for the worker. +- **Processing** — actively being computed. +- **Complete** — ready to view. + +The page polls the server every few seconds and updates the badge in +place as the analysis advances; you don't need to refresh manually. +(New in v0.6.0 — previously the page had to be reloaded.) + +When a report reaches **Complete**, click its row to open it at +``/report/``. + +Reading a report +---------------- + +A completed report lists, per file: + +- Total words and segments. +- Exact-match counts from each attached translation memory. +- Fuzzy-match buckets (e.g. 99–95%, 94–85%, 84–75%) and how many + segments fall into each. +- New words — those without any TM match. + +PMs typically use this breakdown to estimate translation effort, quote +clients, and decide which files (if any) warrant pre-translation from +TM. + +Downloading files +----------------- + +When work is complete, the file table on the project page lets you +download the translated output of each file individually, or export +the entire project as an archive. Choose the export action from the +right-click menu or the action buttons on the file row. diff --git a/docs/source/creating-projects.rst b/docs/source/creating-projects.rst new file mode 100644 index 0000000..ac387f9 --- /dev/null +++ b/docs/source/creating-projects.rst @@ -0,0 +1,69 @@ +Creating projects +================= + +This page is for **project managers** (members of the ``PM`` group) and +administrators. If you're a translator or reviewer, you'll receive +projects from a PM and won't see these screens. + +Create a project +---------------- + +1. From the project list, click the **Create** button to open the new + project form at ``/project/new``. + + .. image:: ./_static/img/project-form.png + :alt: New project form + +2. Fill in the project metadata: + + - **Name** and **due date**. + - **Client** — pick from existing clients, or create one ahead of + time from the Django admin. + - **Source language** and one or more **target languages** — these + are :doc:`language profiles ` that an admin + has set up. + - **Translation memories** to attach to the project. Optional; + attached TMs will surface as matches in the editor. + +3. Upload your files. Kaplan Cloud accepts: + + - **Source files** in the formats supported by the underlying + ``kaplan`` library (e.g. ``.docx``, ``.xlsx``, ``.xliff``). + - **Bilingual files** for projects that already contain translation + work-in-progress (the source-language text is paired with a + partially-filled target). + - **Reference files** — style guides, glossaries, brand assets — + downloadable from the project page but not opened in the editor. + +4. Submit. Each uploaded file is processed in the background and the + project moves through **Preparing** → **Ready for Analysis** → + **Analyzing** → **Ready for Translation**. Watch the project page + while this happens; the file rows light up as each file is ready. + +Assign linguists +---------------- + +Once a project is **Ready for Translation**, assign a translator (and +optionally a reviewer) to each file. + +1. On the project page, tick the checkboxes for the files you want to + assign. Leaving all rows unticked applies the next action to every + file. + +2. Right-click anywhere on the file table and pick **Assign + translator** or **Assign reviewer**. + + .. image:: ./_static/img/files-context-menu.png + :alt: Files context menu + +3. Enter the username of the linguist and submit. + + .. image:: ./_static/img/assign-team-member-form.png + :alt: Assign team member form + + .. image:: ./_static/img/team-member-assigned.png + :alt: Team member assigned + +Once assigned, the linguist sees the project in their own project list +and can open the file in the :doc:`editor`. The file status moves to +**In Translation** the first time they open it. diff --git a/docs/source/editor.rst b/docs/source/editor.rst new file mode 100644 index 0000000..262e650 --- /dev/null +++ b/docs/source/editor.rst @@ -0,0 +1,56 @@ +The translation editor +====================== + +The editor at ``/file/`` is where translators and reviewers work +through a file segment by segment. You can reach it from the file row +on a project page. + +Segments and statuses +--------------------- + +Each segment has a source-language text and a target-language text you +edit. A segment moves through three statuses: + +- **Blank** — untouched. +- **Draft** — you have entered or modified the target text but haven't + finalized it. +- **Translated** — you have confirmed the segment. + +Saving a target text marks the segment as Draft. Confirming a segment +moves it to Translated. A file becomes eligible to move to **In +Review** once all of its segments are Translated. + +Translation memory matches +-------------------------- + +When the project's PM attached one or more translation memories to the +project, the editor looks up each source segment against them and +displays match candidates alongside the segment. Matches can be +**exact** (100% identical source text) or **fuzzy** (similar but not +identical, ranked by similarity score). Selecting a match copies its +target text into the current segment, ready for you to confirm or +edit. + +For more on how TMs are created and what data they contain, see +:doc:`translation-memories`. + +Comments +-------- + +You can leave a comment on any segment — useful for flagging a tricky +choice for the reviewer, or for the reviewer to push something back to +the translator. Comments stay attached to the segment as the file +moves through the workflow. + +Translator vs. reviewer mode +---------------------------- + +A file in **In Translation** status (after a translator has opened it) +is editable by its assigned translator. Once the translator finishes, +the file moves to **In Review** and the assigned reviewer takes over +in the same editor view; the reviewer can edit segments and either +push them back to Draft (returning the file to translation) or +confirm them as final. + +PMs and project owners can open and edit any file at any phase. Other +users cannot edit a file they are not assigned to. diff --git a/docs/source/getting-started.rst b/docs/source/getting-started.rst new file mode 100644 index 0000000..1583ab8 --- /dev/null +++ b/docs/source/getting-started.rst @@ -0,0 +1,42 @@ +Getting started +=============== + +Kaplan Cloud uses invitation tokens rather than open registration. Your +administrator generates a single-use ``UserRegistrationToken`` for you +and sends you a registration URL containing the token. The token also +determines your role (translator, reviewer, PM, or admin) — you don't +choose this yourself at sign-up. + +Register +-------- + +1. Open the registration URL from your administrator. It looks like:: + + https://your-instance.example.com/accounts/register?token= + +2. Choose a username and password and submit the form. The token field + is filled in for you from the URL. + + .. image:: ./_static/img/user-registration-form.png + :alt: Registration form + +3. Once registration succeeds, you'll land on the login page. Sign in + with the credentials you just created. + +The token is single-use and cannot be reused after you register. If +something goes wrong during registration, ask your administrator to +issue you a fresh token. + +Log in and log out +------------------ + +- Log in at ``/accounts/login``. +- Log out at ``/accounts/logout``. Logging out also fires when you + change your password (see below). + +Change your password +-------------------- + +Visit ``/accounts/change-password`` while logged in, enter your current +password and a new one, then submit. You will be signed out +automatically and will need to log in again with the new password. diff --git a/docs/source/index.rst b/docs/source/index.rst index 76f1814..47fbc42 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -1,18 +1,24 @@ -.. Kaplan Cloud documentation master file, created by - sphinx-quickstart on Wed Feb 23 14:33:26 2022. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - Kaplan Cloud ============ +Kaplan Cloud is a translation management system. Project managers +create projects from source documents, attach translation memories, +and assign linguists; translators and reviewers work through the +segments in a web-based editor and hand off completed files back to +the PM for delivery. + +This documentation is the **user manual** for non-developers using a +running Kaplan Cloud instance. If you are deploying or contributing to +Kaplan Cloud, start from the repository's ``README.md`` instead. + .. toctree:: - :maxdepth: 3 + :maxdepth: 2 - try-for-free-online - pre-installation-configuration - installation - users - language-profiles - translation-memories + getting-started projects + editor + creating-projects + analysis-and-reports + translation-memories + language-profiles + inviting-teammates diff --git a/docs/source/installation.rst b/docs/source/installation.rst deleted file mode 100644 index 344b833..0000000 --- a/docs/source/installation.rst +++ /dev/null @@ -1,134 +0,0 @@ -Installation -============ - -============================== -Local installation with Docker -============================== -1. Follow `these instructions `_ to install Docker. - -2. Deploy a `Kaplan Cloud container `_: - - .. note:: - Please note that with Docker containers, storage is ephemeral. This means - that when you upgrade to a newer version, you will essentially remove the - container and its contents along with any work you may have done. Docker - solves this with - `mounts/volumes `_. If you would - like to just fiddle around with Kaplan Cloud, the invocation below is all - you need: - - .. code-block:: - - docker run -d \ - -p 8080:8080 \ - --restart always \ - --name kaplan-cloud \ - kaplanpro/cloud - - However, if you'd like your locally stored data to persist, you'll first - need to create some directories and files, which we will attach (or bind) - to the container: - - .. code-block:: - - mkdir kaplan-cloud && \ - mkdir kaplan-cloud/projects && \ - touch kaplan-cloud/db.sqlite3 - - Now, let's start the container with them attached: - - .. code-block:: - - docker run -d \ - -p 8080:8080 \ - --mount type=bind,source=${PWD}/kaplan-cloud/db.sqlite3,target=/code/db.sqlite3 \ - --mount type=bind,source=${PWD}/kaplan-cloud/projects,target=/code/kaplancloudapp/projects \ - --restart always \ - --name kaplan-cloud \ - kaplanpro/cloud - -3. Create an admin (superuser) account: - - .. code-block:: - - docker exec -it kaplan-cloud python manage.py createsuperuser - -4. We're done! Head on over to http://0.0.0.0:8080 and explore Kaplan Cloud. - -=========================================== -Production installation with Docker Compose -=========================================== - -1. Follow `these instructions `_ to install Docker. - -2. Follow `these instructions `_ to install Docker Compose. - -3. If you have not set a dedicated Docker network for your proxy tier, create one: - - .. code-block:: - - docker network create network-name - - Replace "network-name" with an arbitrary name of your choosing. - -4. If you do not already have one, deploy an `nginxproxy/nginx-proxy container `_: - - .. code-block:: - - docker run --detach \ - --name nginx-proxy \ - --network network-name \ - --publish 80:80 \ - --publish 443:443 \ - --volume certs:/etc/nginx/certs \ - --volume vhost:/etc/nginx/vhost.d \ - --volume html:/usr/share/nginx/html \ - --volume /var/run/docker.sock:/tmp/docker.sock:ro \ - --restart unless-stopped \ - nginxproxy/nginx-proxy - - This container will be routing traffic to your Kaplan Cloud instance. - -5. If you do not already have one, deploy an `nginxproxy/acme-companion container `_: - - .. code-block:: - - docker run --detach \ - --name nginx-proxy-acme \ - --volumes-from nginx-proxy \ - --volume /var/run/docker.sock:/var/run/docker.sock:ro \ - --volume acme:/etc/acme.sh \ - --env "DEFAULT_EMAIL=mail@yourdomain.tld" \ - --restart unless-stopped \ - nginxproxy/acme-companion - - This container will be provisioning free SSL certificates for your Kaplan Cloud instance. - -6. Download the repository from here and enter the .docker directory. - -7. You will find three \*.env.template files. Create .env, db.env and web.env files following the guidance on the templates. - -8. Use docker-compose to run the containers:: - - docker-compose up -d - - If, for some reason, this step fails, run this command without the -d flag to see what went wrong:: - - docker-compose up - -9. Create an admin (superuser) account:: - - docker-compose exec app python manage.py createsuperuser - --------------------------------------- -Additional steps for Cloudflare users --------------------------------------- - -1. Add the following page rule: - - .. code-block:: - - For: *yourdomain.tld/.well-known/* - With: Disable Security, Cache Level: Bypass, Automatic HTTPS Rewrites: Off - - It might take a minute or two for the SSL certificate to kick in. diff --git a/docs/source/inviting-teammates.rst b/docs/source/inviting-teammates.rst new file mode 100644 index 0000000..a286941 --- /dev/null +++ b/docs/source/inviting-teammates.rst @@ -0,0 +1,51 @@ +Inviting teammates +================== + +Kaplan Cloud uses single-use **registration tokens** to onboard new +users. As an administrator, you generate a token for each prospective +user, choose what role they'll get on registration, and share the +resulting registration URL with them. + +This page is for administrators. + +Generate a token +---------------- + +1. Sign in to the Django admin at ``/admin/``. From the left-hand + sidebar, find **User registration tokens** and click **Add user + registration token**. + + .. image:: ./_static/img/user-registration-token-form.png + :alt: New user registration token form + +2. Pick the **user type** for the recipient (translator, reviewer, PM, + or admin). On registration, the new user is automatically added to + the matching group and granted the corresponding permissions. + +3. (Optional) Pick a **client team** the new user will belong to. + Members of a client team can see projects and translation memories + scoped to that client. + +4. Save the token. The token value is generated for you and is + displayed on the token's detail page. + + .. image:: ./_static/img/user-registration-token.png + :alt: User registration token detail + +.. warning:: + + Tokens are single-use, can no longer be edited once created, and + the token field is read-only in the admin. Copy the value before + you leave the page — if you lose it, you'll need to generate a + fresh token. + +Share the registration URL +-------------------------- + +Send the recipient a registration URL of the form:: + + https://your-instance.example.com/accounts/register?token= + +When they open the URL and submit the registration form, the token is +consumed and the account is created with the role you chose. See +:doc:`getting-started` for the recipient's view of the same flow. diff --git a/docs/source/language-profiles.rst b/docs/source/language-profiles.rst index cac3ef0..28f8ae8 100644 --- a/docs/source/language-profiles.rst +++ b/docs/source/language-profiles.rst @@ -1,16 +1,41 @@ -Language Profiles +Language profiles ================= -====================== +A **language profile** represents a language Kaplan Cloud knows about. +Projects, translation memories, and termbases all reference language +profiles, so every language you want to translate from or into needs +one before you can use it. + +A language profile carries: + +- A human-readable **name** (e.g. *English (United States)*). +- An **ISO code** — usually a BCP-47 tag like ``en-US``, ``fr``, or + ``ar-EG``. This is the profile's primary key. +- A **directionality** flag (left-to-right or right-to-left) used by + the editor to render the script correctly. + +Who can manage language profiles +-------------------------------- + +Language profiles are managed by administrators (and members of the +``PM`` group) from the Django admin at ``/admin/`` — they are not +exposed in the regular browser navigation. + Add a language profile -====================== +---------------------- + +1. Sign in to the Django admin at ``/admin/``. From the left-hand + sidebar, find **Language profiles** and click **Add language + profile**. -1. Log in with your admin or PM account at yourdomain.tld/admin, find Language profiles from the left side bar and click ADD LANGUAGE PROFILE: + .. image:: ./_static/img/language-profile.png + :alt: Language profiles admin - .. image:: ./_static/img/language-profile.png - :alt: Language Profile +2. Enter the language **name**, **ISO code**, and the direction flag, + then save. -2. Fill in the name and ISO code for the language and click save. + .. image:: ./_static/img/language-profile-form.png + :alt: Language profile form - .. image:: ./_static/img/language-profile-form.png - :alt: Language Profile form +The new profile becomes available immediately as a source or target +language when creating projects and TMs. diff --git a/docs/source/locale/tr/LC_MESSAGES/index.po b/docs/source/locale/tr/LC_MESSAGES/index.po deleted file mode 100644 index e791813..0000000 --- a/docs/source/locale/tr/LC_MESSAGES/index.po +++ /dev/null @@ -1,24 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2022, Kaplan -# This file is distributed under the same license as the Kaplan Cloud -# package. -# FIRST AUTHOR , 2022. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Kaplan Cloud \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-02-23 20:10+0300\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.9.1\n" - -#: ../../source/index.rst:7 -msgid "Kaplan Cloud" -msgstr "Kaplan Bulut" - diff --git a/docs/source/locale/tr/LC_MESSAGES/installation.po b/docs/source/locale/tr/LC_MESSAGES/installation.po deleted file mode 100644 index 2a06f42..0000000 --- a/docs/source/locale/tr/LC_MESSAGES/installation.po +++ /dev/null @@ -1,192 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2022, Kaplan -# This file is distributed under the same license as the Kaplan Cloud -# package. -# FIRST AUTHOR , 2022. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Kaplan Cloud \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-18 15:53+0300\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.9.1\n" - -#: ../../source/installation.rst:2 -msgid "Installation" -msgstr "Kurulum" - -#: ../../source/installation.rst:6 -msgid "Local installation with Docker" -msgstr "Docker ile yerel kurulum" - -#: ../../source/installation.rst:7 ../../source/installation.rst:61 -msgid "" -"Follow `these instructions `_ to " -"install Docker." -msgstr "" -"`Buradaki talimatları `_ izleyerek " -"Docker kurulumunu tamamlayın." - -#: ../../source/installation.rst:9 -msgid "" -"Deploy a `Kaplan Cloud container " -"`_:" -msgstr "" -"Bir `Kaplan Bulut konteyneri `_" -" başlatın:" - -#: ../../source/installation.rst:11 -msgid "" -"Please note that with Docker containers, storage is ephemeral. This means" -" that when you upgrade to a newer version, you will essentially remove " -"the container and its contents along with any work you may have done. " -"Docker solves this with `mounts/volumes " -"`_. If you would like to just " -"fiddle around with Kaplan Cloud, the invocation below is all you need:" -msgstr "" -"Docker konteynerlerinde depolanan veriler kalıcı değildir. Sürüm " -"yükselteceğinizde konteyneri, içindki verileri ve çalışmalarınızı silmiş " -"olacaksınız. Docker'ın bu durumuma çözümü ise `mount/volume " -"`_. Amacınız Kaplan Bulut'u " -"kurcalamak ise aşağıdaki komutu kullanmanız yeterli:" - -#: ../../source/installation.rst:27 -#, fuzzy -msgid "" -"However, if you'd like your locally stored data to persist, you'll first " -"need to create some directories and files, which we will attach (or bind)" -" to the container:" -msgstr "" -"Ancak, yerelde depolanan verilerinizi kaybetmemek istiyorsanız birkaç dizin ve " -"dosya oluşturup konteynere bağlamanız gerekiyor:" - -#: ../../source/installation.rst:37 -msgid "Now, let's start the container with them attached:" -msgstr "" -"Konteyneri az önce oluşturduğumuz dosya ve dizinler bağlı şekilde " -"başlatalım:" - -#: ../../source/installation.rst:49 -msgid "Create an admin (superuser) account:" -msgstr "Yönetici (süper kullanıcı) hesabı oluşturun:" - -#: ../../source/installation.rst:55 -msgid "We're done! Head on over to http://0.0.0.0:8080 and explore Kaplan Cloud." -msgstr "" -"İşlem tamam! http://0.0.0.0:8080'i açıp Kaplan Bulut'u keşfetmeye " -"başlayabilirsiniz." - -#: ../../source/installation.rst:59 -msgid "Production installation with Docker Compose" -msgstr "Docker Compose ile üretim ortamında kurulum" - -#: ../../source/installation.rst:63 -msgid "" -"Follow `these instructions `_ to" -" install Docker Compose." -msgstr "" -"`Buradaki talimatları `_ " -"izleyerek Docker Compose kurulumunu tamamlayın." - -#: ../../source/installation.rst:65 -msgid "" -"If you have not set a dedicated Docker network for your proxy tier, " -"create one:" -msgstr "Proxy katmanınız için ayrı bir Docker ağınız mevcut değilse oluşturun:" - -#: ../../source/installation.rst:71 -msgid "Replace \"network-name\" with an arbitrary name of your choosing." -msgstr "\"network-name\" yerine istediğiniz herhangi bir ismi girin." - -#: ../../source/installation.rst:73 -msgid "" -"If you do not already have one, deploy an `nginxproxy/nginx-proxy " -"container `_:" -msgstr "" -"Halihazırda yoksa bir `nginxproxy/nginx-proxy konteyneri " -"`_ başlatın:" - -#: ../../source/installation.rst:89 -msgid "This container will be routing traffic to your Kaplan Cloud instance." -msgstr "Bu konteyner gelen trafiği Kaplan Bulut örneğinize yönlendirecek." - -#: ../../source/installation.rst:91 -msgid "" -"If you do not already have one, deploy an `nginxproxy/acme-companion " -"container `_:" -msgstr "" -"Halihazırda yoksa bir `nginxproxy/acme-companion konteyneri " -"`_ konteyneri " -"başlatın:" - -#: ../../source/installation.rst:104 -msgid "" -"This container will be provisioning free SSL certificates for your Kaplan" -" Cloud instance." -msgstr "" -"Bu konteyner, Kaplan Bulut örneğiniz için ücretsiz SSL sertifikaları " -"hazırlayacak." - -#: ../../source/installation.rst:106 -msgid "Download the repository from here and enter the .docker directory." -msgstr "Kod deposunu buradan indirip .docker dizinize girin." - -#: ../../source/installation.rst:108 -msgid "" -"You will find three \\*.env.template files. Create .env, db.env and " -"web.env files following the guidance on the templates." -msgstr "" -"Burada adı \\*.env.template ile sonlanan 3 şablon göreceksiniz. " -"İçlerindeki yönergeleri izleyerek .env, db.env ve web.env dosyalarını " -"hazırlayın." - -#: ../../source/installation.rst:110 -msgid "Use docker-compose to run the containers::" -msgstr "docker-compose kullanarak konteynerleri başlatın::" - -#: ../../source/installation.rst:114 -msgid "" -"If, for some reason, this step fails, run this command without the -d " -"flag to see what went wrong::" -msgstr "" -"Olur da bu adımda hata alırsanız aynı komutu -d işareti olmadan " -"çalıştırarak sorunlu kısmı tespit edebilirsiniz::" - -#: ../../source/installation.rst:118 -msgid "Create an admin (superuser) account::" -msgstr "Yönetici (süper kullanıcı) hesabı oluşturun::" - -#: ../../source/installation.rst:124 -msgid "Additional steps for Cloudflare users" -msgstr "Cloudflare kullanıcıları için ek adımlar" - -#: ../../source/installation.rst:126 -msgid "Add the following page rule:" -msgstr "Aşağıdaki sayfa kuralını ekleyin:" - -#: ../../source/installation.rst:133 -msgid "It might take a minute or two for the SSL certificate to kick in." -msgstr "SSL sertifikanızın devreye girmesi birkaç dakika alabilir." - -#~ msgid "Deploy a `Postgres container `_:" -#~ msgstr "" -#~ "Bir `Postgres konteyneri " -#~ "`_ başlatın:" - -#~ msgid "" -#~ "\"postgres\" is your password for the" -#~ " Postgres instance. It'd be best to" -#~ " change it." -#~ msgstr "" -#~ "Burada \"postgres\" Postgres örneğinizin " -#~ "şifresidir. Değiştirseniz iyi olur." - -#~ msgid "Change \"postgres\" to the password you input in the previous step." -#~ msgstr "Burada \"postgres\" yerine bir önceki adımda girdiğiniz değeri yazın." diff --git a/docs/source/locale/tr/LC_MESSAGES/language-profiles.po b/docs/source/locale/tr/LC_MESSAGES/language-profiles.po deleted file mode 100644 index ca48f4c..0000000 --- a/docs/source/locale/tr/LC_MESSAGES/language-profiles.po +++ /dev/null @@ -1,49 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2022, Kaplan -# This file is distributed under the same license as the Kaplan Cloud -# package. -# FIRST AUTHOR , 2022. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Kaplan Cloud \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-02-23 20:10+0300\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.9.1\n" - -#: ../../source/language-profiles.rst:2 -msgid "Language Profiles" -msgstr "Dil Profili" - -#: ../../source/language-profiles.rst:6 -msgid "Add a language profile" -msgstr "Dil profili ekleme" - -#: ../../source/language-profiles.rst:8 -msgid "" -"Log in with your admin or PM account at yourdomain.tld/admin, find Language " -"profiles from the left side bar and click ADD LANGUAGE PROFILE:" -msgstr "" -"Yönetici ya da PM hesabınızla yönetici sayfasında (ör. yourdomain.tld/admin) " -"oturum açın. Sol tarafta Language profiles (Dil profilleri) şıkkını seçip ADD " -"LANGUAGE PROFILE (DİL PROFİLİ EKLE) düğmesini tıklayın:" - -#: ../../source/language-profiles.rst -msgid "Language Profile" -msgstr "Dil Profili" - -#: ../../source/language-profiles.rst:13 -msgid "Fill in the name and ISO code for the language and click save." -msgstr "Dilin adını ve ISO kodunu girip kaydet düğmesini tıklayın." - -#: ../../source/language-profiles.rst -msgid "Language Profile form" -msgstr "Dil Profili formu" - diff --git a/docs/source/locale/tr/LC_MESSAGES/pre-installation-configuration.po b/docs/source/locale/tr/LC_MESSAGES/pre-installation-configuration.po deleted file mode 100644 index 37d85d3..0000000 --- a/docs/source/locale/tr/LC_MESSAGES/pre-installation-configuration.po +++ /dev/null @@ -1,278 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2022, Kaplan -# This file is distributed under the same license as the Kaplan Cloud -# package. -# FIRST AUTHOR , 2022. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Kaplan Cloud \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-04-01 17:07+0300\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.9.1\n" - -#: ../../source/pre-installation-configuration.rst:2 -msgid "Pre-Installation Configuration" -msgstr "Kurulum Öncesi Yapılandırma" - -#: ../../source/pre-installation-configuration.rst:5 -msgid "File storage" -msgstr "Dosya depolama" - -#: ../../source/pre-installation-configuration.rst:8 -msgid "" -"You should not change the type of storage post-installation. Your files " -"will not be moved to the new storage automatically. You'd need to copy " -"them over manually." -msgstr "" -"Depolama türünü kurulum sonrasında değiştirmeyin. Dosyalarınız yeni " -"depolama alanına otomatik olarak taşınmaz. Elle kopyalamanız gerekir." - -#: ../../source/pre-installation-configuration.rst:13 -msgid "" -"For the purposes of this documentation, private content refers to project" -" files, packages, etc. while public content refers to the style and logic" -" files (CSS, JS, etc.) required for Kaplan Cloud to function in users' " -"web browsers." -msgstr "" -"Bu dokümantasyonda *genel erişime kapalı içerik* ifadesi proje dosyası, " -"paket vb. dosyaları, *genel erişime açık içerik* ifadesi ise Kaplan Bulut'un " -"kullanıcıların internet tarayıcılarında işleyebilmesi için gerekli biçim ve " -"mantık dosyalarını (CSS, JS vb.) ifade eder." - -#: ../../source/pre-installation-configuration.rst:20 -msgid "Local" -msgstr "Yerel" - -#: ../../source/pre-installation-configuration.rst:21 -msgid "" -"Local file storage does not require additional configuration. Static " -"files, which are needed for the app to function are stored at " -"*$PROJECT_DIR/staticfiles*. Project files, packages and others are stored" -" at *$PROJECT_DIR/kaplancloudapp/projects*." -msgstr "" -"Yerel dosya depolamak için ek yapılandırma gerekmez. Uygulamanın işlemesi" -" için gerekli statik dosyalar *$PROJE_DİZİNİ/staticfiles* dizininde " -"saklanırken proje dosyaları, paketler vb. ise " -"*$PROJE_DİZİNİ/kaplancloudapp/projects* dizininde saklanır." - -#: ../../source/pre-installation-configuration.rst:28 -msgid "Google Cloud Storage" -msgstr "Google Cloud Storage" - -#: ../../source/pre-installation-configuration.rst:35 -msgid "" -"Kaplan Cloud depends on `django-storages `_ to offer " -"Google Cloud Storage support." -msgstr "" -"Kaplan Bulut, Google Cloud Storage desteği için `django-storages `_ " -"paketinden destek almaktadır." - -#: ../../source/pre-installation-configuration.rst:39 -msgid "" -"Create a bucket (`Create a new bucket`_) and make sure to set control to " -"*Fine-grained* (`Choose between uniform and fine-grained access`_). You " -"will set the environment variables ``GS_PUBLIC_BUCKET_NAME`` and " -"``GS_PRIVATE_BUCKET_NAME`` to the name of this bucket." -msgstr "" -"Bir kova oluşturun (`Yeni kova oluşturma`_) ve *Fine-grained* kontrol " -"modelini (`Uniform ve fine-grained erişim arasında seçim`_) seçin. " -"``GS_PUBLIC_BUCKET_NAME`` ve ``GS_PRIVATE_BUCKET_NAME`` ortam " -"değişkenlerini bu kovanın adı olarak ayarlayacaksınız." - -#: ../../source/pre-installation-configuration.rst:45 -msgid "" -"Create a service account and make sure it has read and write access to " -"your bucket (`Creating a Service Account`_)." -msgstr "" -"Bir hizmet hesabı oluşturup kovanıza okuma ve yazma erişimi verin " -"(`Hizmet Hesabı Oluşturma`_)." - -#: ../../source/pre-installation-configuration.rst:48 -msgid "" -"Create and download an access key for your service account. You will set " -"the environment variable ``GOOGLE_APPLICATION_CREDENTIALS`` to the path " -"to this key file." -msgstr "" -"Hizmet hesabınız için bir erişim anahtarı oluşturup indirin. " -"``GOOGLE_APPLICATION_CREDENTIALS`` ortam değişkenini bu anahtar dosyasının " -"dosya yoluna ayarlayacaksınız." - -#: ../../source/pre-installation-configuration.rst:53 -msgid "" -"By default, public content will be saved under the */static* directory, " -"while private content will be saved under the */kaplancloudapp/projects* " -"directory. You can change these directories by setting the environment " -"variables ``GS_PUBLIC_BUCKET_LOCATION`` and " -"``GS_PRIVATE_BUCKET_LOCATION``" -msgstr "" -"Varsayılan ayarları değiştirmediğinizde genel erişime açık içeriğiniz " -"*/static* dizininde, genel erişime kapalı içeriğiniz ise " -"*/kaplancloudapp/projects* dizininde saklanır. Bunu " -"``GS_PUBLIC_BUCKET_LOCATION`` ve ``GS_PRIVATE_BUCKET_LOCATION`` ortam " -"değişkenlerini kullanarak değiştirebilirsiniz." - -#: ../../source/pre-installation-configuration.rst:60 -msgid "S3" -msgstr "S3" - -#: ../../source/pre-installation-configuration.rst:68 -msgid "" -"Kaplan Cloud depends on `django-storages `_ to offer S3 " -"support." -msgstr "" -"Kaplan Bulut, S3 desteği için `django-storages `_ paketinden " -"destek almaktadır." - -#: ../../source/pre-installation-configuration.rst:73 -msgid "Separate buckets for private and public content (recommended)" -msgstr "Genel erişime kapalı ve açık içerikler için ayrı kovalar (önerilen)" - -#: ../../source/pre-installation-configuration.rst:75 -msgid "" -"Create the public bucket (`Creating a bucket`_). Make sure to uncheck " -"**Block all public access**. You will set the environment variable " -"``S3_PUBLIC_BUCKET`` to the name of the bucket, and ``S3_REGION_NAME`` to" -" the bucket's region." -msgstr "" -"Genel erişime açık kovayı oluşturun (`Kova oluşturma`_). **Block all " -"public access** seçeneğinin işaretini kaldırmayı unutmayın. " -"``S3_PUBLIC_BUCKET`` ortam değişkenini bu kovanın adı, ``S3_REGION_NAME``" -" ortam değişkenini ise kovanın bölgesi olarak ayarlayacaksınız." - -#: ../../source/pre-installation-configuration.rst:81 -msgid "" -"For your public content to be actually public, you'll need to set the " -"environment variable ``GS_DEFAULT_ACL`` to ``public-read``. This will not" -" affect your private content." -msgstr "" -"Genel erişime açık içeriğinizin ulaşılabilir olması için " -"``GS_DEFAULT_ACL`` ortam değişkenini ``public-read`` olarak ayarlamanız " -"gerekiyor. Bu ayar, genel erişime kapalı içeriğinizi etkilemez." - -#: ../../source/pre-installation-configuration.rst:85 -msgid "" -"Edit the bucket's policy to allow anonymous read access (`Using bucket " -"policies`_). Below is a policy example, change ``mypublicbucket`` to the " -"name of your bucket:" -msgstr "" -"Kovanın politikasını düzenleyip anonim okuma izni tanımlayın (`Kova " -"politikaları kullanma`_). Aşağıdaki örnek politikayı kullanabilirsiniz. " -"``mypublicbucket`` değerini kovanızın adıyla değiştirin." - -#: ../../source/pre-installation-configuration.rst:109 -msgid "" -"Create the private bucket (`Creating a bucket`_). You will set the " -"environment variable ``S3_PRIVATE_BUCKET`` to the name of this bucket." -msgstr "" -"Genel erişime kapalı kovayı oluşturun (`Kova oluşturma`_). " -"``S3_PRIVATE_BUCKET`` ortam değişkenini bu kovanın adı olarak " -"ayarlayacaksınız." - -#: ../../source/pre-installation-configuration.rst:112 -msgid "" -"Head over to IAM and create a policy with full access to these buckets. " -"Change ``arn:aws:s3:::myprivatebucket`` and " -"``arn:aws:s3:::mypublicbucket`` to the names of your buckets (`AWS IAM " -"Docs`_)." -msgstr "" -"IAM sayfasına girip bu kovalara tam erişim veren bir politika oluşturun. " -"``arn:aws:s3:::myprivatebucket`` ve ``arn:aws:s3:::mypublicbucket`` " -"yerine kendi kovalarınızın adlarını yazın (`AWS IAM Dokümantasyonu`_)." - -#: ../../source/pre-installation-configuration.rst:142 -#: ../../source/pre-installation-configuration.rst:194 -msgid "" -"Under Users, create a user for **Access key - Programmatic access** and " -"attach the policy we created at the previous step (`Creating IAM " -"users`_)." -msgstr "" -"Users sekmesinde **Access key - Programmatic access** için kullanıcı " -"oluşturup bir önceki adımda oluşturduğumuz politikayı bu kullanıcıya " -"bağlayın (`IAM kullanıcıları oluşturma`_)." - -#: ../../source/pre-installation-configuration.rst:145 -#: ../../source/pre-installation-configuration.rst:197 -msgid "" -"At the final step, you will be presented with your credentials. You'll " -"set the environment variable ``S3_ACCESS_KEY_ID`` to **Access key ID**, " -"and ``S3_SECRET_ACCESS_KEY`` to **Secret access key**." -msgstr "" -"Son adımda erişim bilgilerinizi göreceksiniz. ``S3_ACCESS_KEY_ID`` ortam " -"değişkenini **Access key ID**, ``S3_SECRET_ACCESS_KEY`` ortam değişkenini " -"ise **Secret access key** hanesinde yazan değer olarak ayarlayın." - -#: ../../source/pre-installation-configuration.rst:150 -msgid "" -"By default, static files will be saved under */static* in the public " -"bucket, and project files will be saved under the root directory of the " -"private bucket. You can change these directories by setting the " -"environment variables ``S3_PUBLIC_BUCKET_LOCATION`` and " -"``S3_PRIVATE_BUCKET_LOCATION``" -msgstr "" -"Varsayılan ayarları değiştirmediğinizde statik dosyalarınız genel erişime" -" açık kovada */static* dizininde kaydedilirken proje dosyaları genel " -"erişime kapalı kovanın kaynak dizinide kaydedilir. Bunu " -"``S3_PUBLIC_BUCKET_LOCATION`` ve ``S3_PRIVATE_BUCKET_LOCATION`` ortam " -"değişkenlerini kullanarak değiştirebilirsiniz." - -#: ../../source/pre-installation-configuration.rst:156 -msgid "Single bucket" -msgstr "Tek kova" - -#: ../../source/pre-installation-configuration.rst:158 -msgid "" -"Create a new bucket with ACL enabled and Block all public access unticked" -" (`Creating a bucket`_). You will set the environment variables " -"``S3_PRIVATE_BUCKET`` and ``S3_PUBLIC_BUCKET`` to the name of this " -"bucket." -msgstr "" -"Bir kova oluşturun. ACL'yi etkinleştirin ve Block all public access " -"ayarının işaretini kaldırın (`Kova oluşturma`_). ``S3_PRIVATE_BUCKET`` " -"ve ``S3_PUBLIC_BUCKET`` ortam değişkenlerini bu kovanın adı olarak " -"ayarlayacaksınız." - -#: ../../source/pre-installation-configuration.rst:163 -msgid "" -"For your public content to be actually public, you'll need to set the " -"environment variable ``S3_DEFAULT_ACL`` to ``public-read``. This will not" -" affect your private content." -msgstr "" -"Genel erişime açık içeriğinizin ulaşılabilir olması için ``S3_DEFAULT_ACL`` " -"ortam değişkenini ``public-read`` olarak ayarlamanız gerekiyor. Bu ayar, genel " -"erişime kapalı içeriğinizi etkilemez." - -#: ../../source/pre-installation-configuration.rst:167 -msgid "" -"Head over to IAM and create a policy with full access to this bucket. " -"Change ``arn:aws:s3:::mybucket`` to the name of your bucket (`AWS IAM " -"Docs`_)." -msgstr "" -"IAM sayfasına girip bu kovaya tam erişim veren bir politika oluşturun. " -"``arn:aws:s3:::mybucket`` yerine kendi kovanızın adını yazın (`AWS IAM " -"Dokümantasyonu`_)." - -#: ../../source/pre-installation-configuration.rst:202 -msgid "" -"By default, public content will be saved under the */static* directory, " -"while private content will be saved under the */kaplancloudapp/projects* " -"directory. You can change these directories by setting the environment " -"variables ``S3_PUBLIC_BUCKET_LOCATION`` and " -"``S3_PRIVATE_BUCKET_LOCATION``" -msgstr "" -"Varsayılan ayarları değiştirmediğinizde genel erişime açık içerik " -"*/static* dizininde, genel erişime kapalı içerik ise " -"*/kaplancloudapp/projects* dizininde saklanır. Bunu " -"``S3_PRIVATE_BUCKET_LOCATION`` ve ``S3_PUBLIC_BUCKET_LOCATION`` ortam " -"değişkenlerini kullanarak değiştirebilirsiniz." diff --git a/docs/source/locale/tr/LC_MESSAGES/projects.po b/docs/source/locale/tr/LC_MESSAGES/projects.po deleted file mode 100644 index f978322..0000000 --- a/docs/source/locale/tr/LC_MESSAGES/projects.po +++ /dev/null @@ -1,93 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2022, Kaplan -# This file is distributed under the same license as the Kaplan Cloud -# package. -# FIRST AUTHOR , 2022. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Kaplan Cloud \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-02-23 20:10+0300\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.9.1\n" - -#: ../../source/projects.rst:2 -msgid "Projects" -msgstr "Proje" - -#: ../../source/projects.rst:6 -msgid "Create a project" -msgstr "Proje oluşturma" - -#: ../../source/projects.rst:8 ../../source/projects.rst:26 -msgid "Log in with your admin or PM account." -msgstr "Yönetici ya da PM hesabınızla oturum açın." - -#: ../../source/projects.rst:10 -msgid "Go to the Projects tab and click Create." -msgstr "Projects (Projeler) sekmesine girip Create (Oluştur) düğmesine tıklayın." - -#: ../../source/projects.rst -msgid "Projects tab" -msgstr "Projeler sekmesi" - -#: ../../source/projects.rst:15 -msgid "Fill out the form, select files, and submit." -msgstr "Formu doldurun, ilgili dosyaları seçin ve gönderin." - - -msgid "Project form" -msgstr "Proje formu" - -#: ../../source/projects.rst:20 -msgid "" -"Once all files are processed and if there are no errors, a project analysis " -"will be run. When the analysis is ready, the project will be moved to the Ready" -" for Translation stage. To move on, you'll need to assign team members as " -"translator/reviewer for the files." -msgstr "" -"Tüm dosyalar işlendiğinde ve herhangi bir hata meydana gelmezse proje analizi " -"başlatılır. Analiz tamamlandığında proje Çeviriye Hazır aşamasına geçer. " -"Buradan devam etmek için ekip üyelerini dosyalara çevirmen/editör olarak " -"atamanız gerekir." - -#: ../../source/projects.rst:24 -msgid "Assign team members" -msgstr "Ekip üyesi atama" - -#: ../../source/projects.rst:28 -msgid "" -"Open the project and tick the checkboxes for the file(s) you wish to assign to " -"a team member. No ticks means all files." -msgstr "" -"Projeyi açıp ekip üyesi atamak istediğiniz dosyaların kutucuğunu işaretleyin. " -"Hiçbir kutucuğu işaretlemediğinizde tüm dosyalar için işlem yapmak istediğiniz " -"varsayılır." - -#: ../../source/projects.rst:30 -msgid "" -"Right click anywhere on the page and select the appropriate function based on " -"whether you wish to assign the team member as a translator or reviewer." -msgstr "" -"Sayfanın herhangi bir noktasında sağ tıklayıp açılan menüden çevirmen ya da " -"editör atamayla ilgili işlevi seçin." - -#: ../../source/projects.rst -msgid "Files context menu" -msgstr "Dosya bağlam menüsü" - -#: ../../source/projects.rst:35 -msgid "Enter the username of the team member and submit the form." -msgstr "Ekip üyesinin kullanıcı adını girip formu gönderin." - -#: ../../source/projects.rst -msgid "Assign team member form" -msgstr "Ekip üyesi atama formu" - diff --git a/docs/source/locale/tr/LC_MESSAGES/translation-memories.po b/docs/source/locale/tr/LC_MESSAGES/translation-memories.po deleted file mode 100644 index 61af69b..0000000 --- a/docs/source/locale/tr/LC_MESSAGES/translation-memories.po +++ /dev/null @@ -1,58 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2022, Kaplan -# This file is distributed under the same license as the Kaplan Cloud -# package. -# FIRST AUTHOR , 2022. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Kaplan Cloud \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-02-23 20:10+0300\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.9.1\n" - -#: ../../source/translation-memories.rst:2 -msgid "Translation Memories" -msgstr "Çeviri Belleği" - -#: ../../source/translation-memories.rst:6 -msgid "Create a translation memory" -msgstr "Çeviri belleği oluşturma" - -#: ../../source/translation-memories.rst:8 -msgid "Log in with your admin or PM account." -msgstr "Yönetici ya da PM hesabınızla oturum açın." - -#: ../../source/translation-memories.rst:10 -msgid "Go to the Translation Memories tab and click Create." -msgstr "" -"Translation Memories (Çeviri Bellekleri) sekmesine girip Create (Oluştur) " -"düğmesine tıklayın." - -#: ../../source/translation-memories.rst -msgid "Translation Memories tab" -msgstr "Çeviri Bellekleri sekmesi" - -#: ../../source/translation-memories.rst:15 -msgid "Fill out the form and submit." -msgstr "Formu doldurup gönderin." - - -msgid "Translation Memory form" -msgstr "Çeviri Belleği formu" - -#: ../../source/translation-memories.rst:20 -msgid "" -"If you do not see the languages you want to create the translation memory for, " -"please see the section on Language Profiles for how to add them." -msgstr "" -"Çeviri belleği oluşturmak istediğiniz dilleri bulamazsanız bu dilleri nasıl " -"ekleyebileceğinizi Dil Profili bölümünden öğrenebilirsiniz." - diff --git a/docs/source/locale/tr/LC_MESSAGES/try-for-free-online.po b/docs/source/locale/tr/LC_MESSAGES/try-for-free-online.po deleted file mode 100644 index 8082edc..0000000 --- a/docs/source/locale/tr/LC_MESSAGES/try-for-free-online.po +++ /dev/null @@ -1,92 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2022, Kaplan -# This file is distributed under the same license as the Kaplan Cloud -# package. -# FIRST AUTHOR , 2022. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Kaplan Cloud \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-18 15:53+0300\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.9.1\n" - -#: ../../source/try-for-free-online.rst:2 -msgid "Try for Free Online" -msgstr "Çevrim İçi Ücretsiz Deneme" - -#: ../../source/try-for-free-online.rst:6 -msgid "Google Cloud Console Cloud Shell" -msgstr "Google Cloud Console Cloud Shell" - -#: ../../source/try-for-free-online.rst:9 -msgid "" -"You may need to set up a project for this to work; however, you won't be " -"asked for billing information, or charged. You will be using your weekly " -"GCP Cloud Shell quota." -msgstr "" -"Öncelikle proje oluşturmanız gerekebilir. Ödeme belgeleri istenmez ve ücret " -"kesilmez. Haftalık ücretsiz GCP Cloud Shell kotanızdan kullanacaksınız." - -#: ../../source/try-for-free-online.rst:13 -msgid "" -"1. Head on over to https://console.cloud.google.com/ and click **Activate" -" Cloud Shell** at top right corner and wait for your Cloud Shell machine " -"to be provisioned." -msgstr "" -"1\. https://console.cloud.google.com/ adresine girip sağ üstten **Activate " -"Cloud Shell** düğmesini tıklayın. Cloud Shell makinenizin hazırlanmasını " -"bekleyin." - -#: ../../source/try-for-free-online.rst -msgid "Activate GCP Cloud Shell" -msgstr "GCP Cloud Shell etkinleştirme" - -#: ../../source/try-for-free-online.rst:19 -msgid "Run a Kaplan Cloud container:" -msgstr "Kaplan Bulut konteyneri çalıştırın:" - -#: ../../source/try-for-free-online.rst -msgid "Run a Kaplan Cloud container" -msgstr "Kaplan Bulut konteyneri çalıştırma" - -#: ../../source/try-for-free-online.rst:32 -msgid "Create a superuser account:" -msgstr "Süper kullanıcı hesabı oluşturun:" - -#: ../../source/try-for-free-online.rst -msgid "Create a superuser account" -msgstr "Süper kullanıcı hesabı oluşturma" - -#: ../../source/try-for-free-online.rst:41 -msgid "Click **Web Preview** and then **Preview on port 8080**" -msgstr "" -"**Web Preview** düğmesini tıklayıp **Preview on port 8080** şıkkını " -"seçin." - -#: ../../source/try-for-free-online.rst -msgid "Web Preview button" -msgstr "Web Preview düğmesi" - -#: ../../source/try-for-free-online.rst:46 -msgid "You should see the login page. You might need to give it a moment." -msgstr "Oturum açma sayfasını göreceksiniz. Biraz beklemeniz gerekebilir." - -#: ../../source/try-for-free-online.rst -msgid "Web Preview login page" -msgstr "Web Preview oturum açma sayfası" - -#: ../../source/try-for-free-online.rst:51 -msgid "Log in with your credentials and give Kaplan Cloud a try!" -msgstr "Oturum açıp Kaplan Bulut'u deneyin!" - -#: ../../source/try-for-free-online.rst -msgid "Web Preview homepage" -msgstr "Web Preview ana sayfa" diff --git a/docs/source/locale/tr/LC_MESSAGES/users.po b/docs/source/locale/tr/LC_MESSAGES/users.po deleted file mode 100644 index e7f93f1..0000000 --- a/docs/source/locale/tr/LC_MESSAGES/users.po +++ /dev/null @@ -1,74 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2022, Kaplan -# This file is distributed under the same license as the Kaplan Cloud -# package. -# FIRST AUTHOR , 2022. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Kaplan Cloud \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-02-23 20:10+0300\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.9.1\n" - -#: ../../source/users.rst:2 -msgid "Users" -msgstr "Kullanıcı" - -#: ../../source/users.rst:6 -msgid "Add a user" -msgstr "Kullanıcı ekleme" - -#: ../../source/users.rst:8 -msgid "" -"Log in with your admin account at yourdomain.tld/admin, find User registration " -"tokens from the left side bar and click ADD USER REGISTRATION TOKEN:" -msgstr "" -"Yönetici hesabınızla yönetici sayfasında (ör. yourdomain.tld/admin) oturum " -"açın. Sol tarafta User registration tokens (Kullanıcı kayıt jetonları) şıkkını " -"seçip ADD USER REGISTRATION TOKEN (KULLANICI KAYIT JETONU EKLE) düğmesini " -"tıklayın:" - -#: ../../source/users.rst -msgid "User Registration Token" -msgstr "Kullanıcı Kayıt Jetonu" - -#: ../../source/users.rst:13 -msgid "Select the type of user account and click SAVE:" -msgstr "Kullanıcı türünü seçip Save (Kaydet) düğmesini tıklayın:" - -#: ../../source/users.rst -msgid "User Registration Token form" -msgstr "Kullanıcı Kayıt Jetonu formu" - -#: ../../source/users.rst:18 -msgid "" -"Provide the new team member with the token and the link to the registration " -"page (yourdomain.tld/accounts/register)." -msgstr "" -"Jetonu ve kayıt sayfasının bağlantısını (yourdomain.tld/accounts/register) yeni" -" ekip üyesine iletin." - -#: ../../source/users.rst:22 -msgid "Registration" -msgstr "Kayıt" - -#: ../../source/users.rst:24 -msgid "Go to the registration page (eg. yourdomain.tld/accounts/register)." -msgstr "Kayıt sayfasını açın (ör. yourdomain.tld/accounts/register)." - -#: ../../source/users.rst:26 -msgid "Enter your details and the token you were provided with." -msgstr "Bilgilerinizi ve size iletilen jetonu girin." - -#: ../../source/users.rst -msgid "User registration form" -msgstr "Kullanıcı kayıt formu" - diff --git a/docs/source/pre-installation-configuration.rst b/docs/source/pre-installation-configuration.rst deleted file mode 100644 index 5362e27..0000000 --- a/docs/source/pre-installation-configuration.rst +++ /dev/null @@ -1,205 +0,0 @@ -Pre-Installation Configuration -============================== - -File storage ------------- - -.. warning:: - You should not change the type of storage post-installation. Your files - will not be moved to the new storage automatically. You'd need to copy - them over manually. - -.. note:: - For the purposes of this documentation, private content refers to project - files, packages, etc. while public content refers to the style and logic - files (CSS, JS, etc.) required for Kaplan Cloud to function in users' web - browsers. - ------ -Local ------ -Local file storage does not require additional configuration. Static files, -which are needed for the app to function are stored at *$PROJECT_DIR/staticfiles*. -Project files, packages and others are stored at -*$PROJECT_DIR/kaplancloudapp/projects*. - --------------------- -Google Cloud Storage --------------------- - -.. _Create a new bucket: https://cloud.google.com/storage/docs/creating-buckets#create_a_new_bucket -.. _Choose between uniform and fine-grained access: https://cloud.google.com/storage/docs/access-control#choose_between_uniform_and_fine-grained_access -.. _Creating a Service Account: https://cloud.google.com/docs/authentication/getting-started#creating_a_service_account - -.. note:: - Kaplan Cloud depends on `django-storages - `_ - to offer Google Cloud Storage support. - -1. Create a bucket (`Create a new bucket`_) - and make sure to set control to *Fine-grained* (`Choose between uniform and - fine-grained access`_). You will set the environment variables - ``GS_PUBLIC_BUCKET_NAME`` and ``GS_PRIVATE_BUCKET_NAME`` to the name of this - bucket. - - .. note:: - For your public content to be actually public, you'll need to set the - environment variable ``GS_DEFAULT_ACL`` to ``public-read``. This will not - affect your private content. - -2. Create a service account and make sure it has read and write access to your - bucket (`Creating a Service Account`_). - -3. Create and download an access key for your service account. You will set the - environment variable ``GOOGLE_APPLICATION_CREDENTIALS`` to the path to this - key file. - -.. note:: - By default, public content will be saved under the */static* directory, while - private content will be saved under the */kaplancloudapp/projects* directory. - You can change these directories by setting the environment variables - ``GS_PUBLIC_BUCKET_LOCATION`` and ``GS_PRIVATE_BUCKET_LOCATION`` - --- -S3 --- - -.. _Creating a bucket: https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html -.. _Using bucket policies: https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html -.. _AWS IAM Docs: https://docs.aws.amazon.com/iam -.. _Creating IAM users: https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console - -.. note:: - Kaplan Cloud depends on `django-storages - `_ - to offer S3 support. - -Separate buckets for private and public content (recommended) -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -1. Create the public bucket (`Creating a bucket`_). Make sure to uncheck - **Block all public access**. You will set the environment variable - ``S3_PUBLIC_BUCKET`` to the name of the bucket, and ``S3_REGION_NAME`` to the - bucket's region. - -2. Edit the bucket's policy to allow anonymous read access - (`Using bucket policies`_). Below is a policy example, change - ``mypublicbucket`` to the name of your bucket: - - .. code-block:: - - { - "Version": "2012-10-17", - "Statement": [ - { - "Sid": "PublicRead", - "Effect": "Allow", - "Principal": "*", - "Action": [ - "s3:GetObject", - "s3:GetObjectVersion" - ], - "Resource": [ - "arn:aws:s3:::mypublicbucket/*" - ] - } - ] - } - -3. Create the private bucket (`Creating a bucket`_). You will set the - environment variable ``S3_PRIVATE_BUCKET`` to the name of this bucket. - -4. Head over to IAM and create a policy with full access to these buckets. - Change ``arn:aws:s3:::myprivatebucket`` and ``arn:aws:s3:::mypublicbucket`` - to the names of your buckets (`AWS IAM Docs`_). - - .. code-block:: - - { - "Version": "2012-10-17", - "Statement": [ - { - "Sid": "KaplanCloudBuckets", - "Effect": "Allow", - "Action": [ - "s3:PutObject", - "s3:GetObjectAcl", - "s3:GetObject", - "s3:ListBucket", - "s3:DeleteObject", - "s3:PutObjectAcl" - ], - "Resource": [ - "arn:aws:s3:::myprivatebucket/*", - "arn:aws:s3:::myprivatebucket", - "arn:aws:s3:::mypublicbucket/*", - "arn:aws:s3:::mypublicbucket" - ] - } - ] - } - -5. Under Users, create a user for **Access key - Programmatic access** and - attach the policy we created at the previous step (`Creating IAM users`_). - -6. At the final step, you will be presented with your credentials. You'll set - the environment variable ``S3_ACCESS_KEY_ID`` to **Access key ID**, and - ``S3_SECRET_ACCESS_KEY`` to **Secret access key**. - -.. note:: - By default, static files will be saved under */static* in the public bucket, - and project files will be saved under the root directory of the private - bucket. You can change these directories by setting the environment variables - ``S3_PUBLIC_BUCKET_LOCATION`` and ``S3_PRIVATE_BUCKET_LOCATION`` - -Single bucket -~~~~~~~~~~~~~ - -1. Create a new bucket with ACL enabled and Block all public access unticked - (`Creating a bucket`_). You will set the environment variables - ``S3_PRIVATE_BUCKET`` and ``S3_PUBLIC_BUCKET`` to the name of this bucket. - - .. note:: - For your public content to be actually public, you'll need to set the - environment variable ``S3_DEFAULT_ACL`` to ``public-read``. This will not - affect your private content. - -2. Head over to IAM and create a policy with full access to this bucket. - Change ``arn:aws:s3:::mybucket`` to the name of your bucket (`AWS IAM Docs`_). - - .. code-block:: - - { - "Version": "2012-10-17", - "Statement": [ - { - "Sid": "KaplanCloudBucket", - "Effect": "Allow", - "Action": [ - "s3:PutObject", - "s3:GetObjectAcl", - "s3:GetObject", - "s3:ListBucket", - "s3:DeleteObject", - "s3:PutObjectAcl" - ], - "Resource": [ - "arn:aws:s3:::mybucket/*", - "arn:aws:s3:::mybucket" - ] - } - ] - } - -3. Under Users, create a user for **Access key - Programmatic access** and - attach the policy we created at the previous step (`Creating IAM users`_). - -4. At the final step, you will be presented with your credentials. You'll set - the environment variable ``S3_ACCESS_KEY_ID`` to **Access key ID**, and - ``S3_SECRET_ACCESS_KEY`` to **Secret access key**. - -.. note:: - By default, public content will be saved under the */static* directory, while - private content will be saved under the */kaplancloudapp/projects* directory. - You can change these directories by setting the environment variables - ``S3_PUBLIC_BUCKET_LOCATION`` and ``S3_PRIVATE_BUCKET_LOCATION`` diff --git a/docs/source/projects.rst b/docs/source/projects.rst index ab0c7ea..709088f 100644 --- a/docs/source/projects.rst +++ b/docs/source/projects.rst @@ -1,38 +1,56 @@ Projects ======== -================ -Create a project -================ - -1. Log in with your admin or PM account. - -2. Go to the Projects tab and click Create. - - .. image:: ./_static/img/projects-tab.png - :alt: Projects tab - -3. Fill out the form, select files, and submit. - - .. image:: ./_static/img/project-form.png - :alt: Project form - - Once all files are processed and if there are no errors, a project analysis will be run. When the analysis is ready, the project will be moved to the Ready for Translation stage. To move on, you'll need to assign team members as translator/reviewer for the files. - -=================== -Assign team members -=================== - -1. Log in with your admin or PM account. - -2. Open the project and tick the checkboxes for the file(s) you wish to assign to a team member. No ticks means all files. - -3. Right click anywhere on the page and select the appropriate function based on whether you wish to assign the team member as a translator or reviewer. - - .. image:: ./_static/img/files-context-menu.png - :alt: Files context menu - -4. Enter the username of the team member and submit the form. - - .. image:: ./_static/img/assign-team-member-form.png - :alt: Assign team member form +After signing in, the project list is your home page. This page covers +the project list and the project detail view from a translator or +reviewer perspective — for creating projects yourself, see +:doc:`creating-projects`. + +The project list +---------------- + +The landing page at ``/`` shows every project you are involved in. A +project appears in your list if any of the following is true: + +- You are a member of the client team the project belongs to. +- You created the project (PM workflow). +- You are assigned as translator or reviewer on at least one of its + files. + +.. image:: ./_static/img/projects-tab.png + :alt: Projects tab + +Each row shows the project's name, source and target languages, +client, due date, and current status. Status flows from **Preparing** +through **Ready for Analysis**, **Analyzing**, **Ready for +Translation**, **In Translation**, **In Review**, **Complete**, and +**Delivered**. (You may also see **Error** if file ingestion failed.) + +The project detail page +----------------------- + +Clicking a project takes you to ``/project/``. The header shows +project metadata; below it is a table of files, each with its own +status that follows the same lifecycle as the project itself. + +For each file you'll see: + +- The original filename and source-language file size. +- The current status badge. +- Who, if anyone, is assigned as translator and reviewer. +- A row action to open the file in the editor — see :doc:`editor`. + +Files appear as **Ready for Translation** once the project's initial +analysis is complete. A file you are assigned to as a translator will +move to **In Translation** the first time you open it; when you finish, +it goes to **In Review** for your reviewer, and finally to +**Complete**. + +Reference files +--------------- + +If the PM uploaded reference material (style guides, glossaries, +brand assets) alongside the source files, they appear in a dedicated +section on the project page. Click any reference file to download it. +Reference files are read-only — they don't go through the segment +editor. diff --git a/docs/source/translation-memories.rst b/docs/source/translation-memories.rst index 08b7232..2e3f36d 100644 --- a/docs/source/translation-memories.rst +++ b/docs/source/translation-memories.rst @@ -1,20 +1,61 @@ -Translation Memories +Translation memories ==================== -=========================== -Create a translation memory -=========================== +A translation memory (TM) is a store of previously-translated segment +pairs (source + target text). When a PM attaches a TM to a project, +the editor surfaces matching past translations as the linguist works. +Over time, your team builds up TMs per client or per domain and +re-uses them on new projects. -1. Log in with your admin or PM account. +This page covers the TM screens. For how matches appear during +translation, see :doc:`editor`. -2. Go to the Translation Memories tab and click Create. +The Translation Memories list +----------------------------- - .. image:: ./_static/img/translation-memories-tab.png - :alt: Translation Memories tab +Visit ``/translation-memories`` to see every TM you have access to. +PMs and administrators see all TMs they manage; other users see TMs +they can use via the client teams they belong to. -3. Fill out the form and submit. +.. image:: ./_static/img/translation-memories-tab.png + :alt: Translation Memories tab - .. image:: ./_static/img/translation-memory-form.png - :alt: Translation Memory form +Each row shows the TM's name, language pair, the client it belongs +to (if any), and a row action to open its detail page. - If you do not see the languages you want to create the translation memory for, please see the section on Language Profiles for how to add them. +Create a TM (PM only) +--------------------- + +1. From the TM list, click **Create** to open the new TM form at + ``/translation-memory/new``. + + .. image:: ./_static/img/translation-memory-form.png + :alt: Translation memory form + +2. Fill in the form: + + - **Name** — short, descriptive (e.g. ``Acme legal EN→FR``). + - **Source language** and **target language** — both must already + exist as :doc:`language profiles `. If the + language you need is missing, ask an admin to add it first. + - **Client** — optional; scope the TM to a single client's team. + +3. Submit. The new TM is empty until you import content or run a + project against it. + +Import existing translations +---------------------------- + +On a TM's detail page, the **Import** action at +``/translation-memory//import`` accepts ``.tmx`` files (the +industry-standard Translation Memory eXchange format). Uploading a TMX +file appends its segment pairs to the TM. + +Use TMs in a project +-------------------- + +When creating a project (see :doc:`creating-projects`), select one or +more TMs from the list of TMs you have access to. The project analysis +runs every segment of every source file against those TMs and records +matches in the analysis report; the editor surfaces those same matches +live as the linguist works. diff --git a/docs/source/try-for-free-online.rst b/docs/source/try-for-free-online.rst deleted file mode 100644 index 7ec0012..0000000 --- a/docs/source/try-for-free-online.rst +++ /dev/null @@ -1,54 +0,0 @@ -Try for Free Online -=================== - -================================ -Google Cloud Console Cloud Shell -================================ - -.. note:: - You may need to set up a project for this to work; however, you won't be - asked for billing information, or charged. You will be using your weekly - GCP Cloud Shell quota. - -1. Head on over to https://console.cloud.google.com/ and click **Activate Cloud -Shell** at top right corner and wait for your Cloud Shell machine to be provisioned. - - .. image:: ./_static/img/gcp-cloud-shell.png - :alt: Activate GCP Cloud Shell - -2. Run a Kaplan Cloud container: - - .. image:: ./_static/img/gcp-cloud-shell-run-kaplan-cloud.png - :alt: Run a Kaplan Cloud container - - .. code-block:: - - docker run -d \ - -p 8080:8080 \ - -e CSRF_TRUSTED_ORIGINS=https://*.cloudshell.dev \ - --name kaplan-cloud-demo \ - kaplanpro/cloud - -3. Create a superuser account: - - .. image:: ./_static/img/gcp-cloud-shell-createsuperuser.png - :alt: Create a superuser account - - .. code-block:: - - docker exec -it kaplan-cloud-demo python manage.py createsuperuser - -4. Click **Web Preview** and then **Preview on port 8080** - - .. image:: ./_static/img/gcp-cloud-shell-web-preview-button.png - :alt: Web Preview button - -5. You should see the login page. You might need to give it a moment. - - .. image:: ./_static/img/gcp-cloud-shell-preview-login.png - :alt: Web Preview login page - -6. Log in with your credentials and give Kaplan Cloud a try! - - .. image:: ./_static/img/gcp-cloud-shell-preview-homepage.png - :alt: Web Preview homepage diff --git a/docs/source/users.rst b/docs/source/users.rst deleted file mode 100644 index 5f398db..0000000 --- a/docs/source/users.rst +++ /dev/null @@ -1,29 +0,0 @@ -Users -===== - -========== -Add a user -========== - -1. Log in with your admin account at yourdomain.tld/admin, find User registration tokens from the left side bar and click ADD USER REGISTRATION TOKEN: - - .. image:: ./_static/img/user-registration-token.png - :alt: User Registration Token - -2. Select the type of user account and click SAVE: - - .. image:: ./_static/img/user-registration-token-form.png - :alt: User Registration Token form - -3. Provide the new team member with the token and the link to the registration page (yourdomain.tld/accounts/register). - -============ -Registration -============ - -1. Go to the registration page (eg. yourdomain.tld/accounts/register). - -2. Enter your details and the token you were provided with. - - .. image:: ./_static/img/user-registration-form.png - :alt: User registration form