mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-06-20 16:42:45 +02:00
Merge 1ae117acfa
into 4b70fab608
This commit is contained in:
commit
c3b2e13a1b
33
README.md
33
README.md
@ -17,19 +17,36 @@ If you have the motivation and experience with Typescript/Javascript (or are wil
|
||||
|
||||
#### Running Locally
|
||||
|
||||
1. Clone the repo and in the root directory run `npm install`
|
||||
- *if you run into any errors, reach out in the **#dev-corner** channel in discord*
|
||||
2. Run `npm run start:dev` to locally run the project in `localhost:8000`
|
||||
1. Clone the repository through Git by running the following command in your desired directory:
|
||||
``bash
|
||||
git clone --recurse-submodules https://github.com/pagefaultgames/pokerogue
|
||||
```
|
||||
[^1]
|
||||
2. Run `npm install` in the newly cloned folder to download required dependencies.
|
||||
3. Run `npm run start:dev` to locally run the project in `localhost:8000`
|
||||
|
||||
If you run into any errors, reach out in the **#dev-corner** channel in discord
|
||||
|
||||
[^1]: If you forget to use the `--recurse-submodules` flag when cloning initially, consult [localization.md](./docs/localization.md) \
|
||||
for instructions on how to clone the `locales` submodule manually.
|
||||
|
||||
#### Linting
|
||||
|
||||
We're using Biome as our common linter and formatter. It will run automatically during the pre-commit hook but if you would like to manually run it, use the `npm run biome` script. To view the complete rules, check out the [biome.jsonc](./biome.jsonc) file.
|
||||
<!-- TODO: Mention linting.md -->
|
||||
We're using Biome as our common linter and formatter. \
|
||||
It will run automatically during the pre-commit hook, or can be done manually via `npm run biome`. \
|
||||
To view the complete rules, check out the [biome.jsonc](./biome.jsonc) file.
|
||||
|
||||
### 📚 Documentation
|
||||
|
||||
You can find the auto-generated documentation [here](https://pagefaultgames.github.io/pokerogue/main/index.html).
|
||||
For information on enemy AI, check out the [enemy-ai.md](./docs/enemy-ai.md) file.
|
||||
For detailed guidelines on documenting your code, refer to the [comments.md](./docs/comments.md) file.
|
||||
|
||||
Additionally, the [docs folder](./docs) contains a variety of documents and guides useful for aspiring contributors. \
|
||||
Notable topics include:
|
||||
- [Commenting your code](./docs/comments.md)
|
||||
- [Linting & Formatting](./docs/linting.md)
|
||||
- [Localization](./docs/localization.md)
|
||||
- [Enemy AI move selection](./docs/enemy-ai.md)
|
||||
|
||||
### ❔ FAQ
|
||||
|
||||
@ -39,8 +56,8 @@ For detailed guidelines on documenting your code, refer to the [comments.md](./d
|
||||
|
||||
**How do I retrieve the translations?**
|
||||
|
||||
- The translations were moved to the [dedicated translation repository](https://github.com/pagefaultgames/pokerogue-locales) and are now applied as a submodule in this project.
|
||||
- The command to retrieve the translations is `git submodule update --init --recursive`. If you still struggle to get it working, please reach out to #dev-corner channel in Discord.
|
||||
- See [localization.md](./docs/localization.md) for detailed info on everything to do with translations, \
|
||||
from cloning the `locales` repository to adding new entries and submitting changes.
|
||||
|
||||
## 🪧 To Do
|
||||
|
||||
|
137
docs/localization.md
Normal file
137
docs/localization.md
Normal file
@ -0,0 +1,137 @@
|
||||
# Localization 101
|
||||
|
||||
PokéRogue's localization team puts immense effort into making the game accessible around the world, supporting over 12 different languages at the time of writing this document. \
|
||||
As a developer, it's important to help maintain global accessibility by effectively coordinating with the Translation Team on any new features or enhancements.
|
||||
|
||||
This document aims to cover everything you need to know to help keep the integration process for localization smooth and simple.
|
||||
|
||||
# Stupid Assumptions
|
||||
Before you continue, this document assumes:
|
||||
<!-- TODO: Move to contributing.md once that is released -->
|
||||
- You have already forked the repository and set up a development environment according to the [respository README](https://github.com/pagefaultgames/pokerogue/blob/beta/README.md).
|
||||
<!-- TODO: Ask @SirsBenjie for a good Git/GH tutorial for noobs -->
|
||||
- You have a basic level of familiarity with Git commands and GitHub repositories.
|
||||
- You have joined the [community Discord](https://discord.gg/pokerogue) and have access to `#dev-corner` and related channels via **[#select-roles](https://discord.com/channels/1125469663833370665/1194825607738052621)**. This is the easiest way to keep in touch with both the Translation Team and other like-minded contributors!
|
||||
|
||||
# About the `pokerogue-locales` submodule
|
||||
|
||||
PokéRogue's translations are managed under a separate dedicated repository, [`pokerogue-locales`](https://github.com/pagefaultgames/pokerogue-locales/).
|
||||
This repository is integrated into the main one as a [git submodule](https://git-scm.com/book/en/v2/Git-Tools-Submodules) within the `public/locales` folder.
|
||||
|
||||
## What Is a Submodule?
|
||||
|
||||
In essence, a submodule is a way for one repository (i.e. `pokerogue`) to use another repository (i.e. `pokerogue-locales`) internally. The parent repo (the "superproject") houses a cloned version of the 2nd repository (the "submodule") inside it, making locales effectively a "repository within a repository", so to speak.
|
||||
|
||||
>[!TIP]
|
||||
> Many popular IDEs have integrated `git` support with special handling around submodules:
|
||||
> 
|
||||
>
|
||||
> 
|
||||
|
||||
From the perspective of the main project, the locales submodule is fairly simple to work with, but there are some important commands to keep in mind.
|
||||
## Fetching Changes from Submodules
|
||||
|
||||
Once you have set up your fork, run the following command to initialize your branch's locales repository and update its HEAD:
|
||||
```bash
|
||||
git submodule update --init --recursive
|
||||
```
|
||||
|
||||
This is run automatically after merge or switching branches, so you _usually_ won't have to run it yourself after the first time.
|
||||
|
||||
> [!WARNING]
|
||||
If you run into issues with your development environment afterwards, try deleting the `.git/modules/public` and `public/locales` folders before re-running the command.
|
||||
|
||||
## How Are Translations Integrated?
|
||||
|
||||
This project uses the [i18next library](https://www.i18next.com/) to integrate translations from `public/locales` into the source code.
|
||||
The basic process for fetching translated text goes roughly as follows:
|
||||
1. The source code fetches text by a given key.
|
||||
```ts
|
||||
globalScene.phaseManager.queueMessage(
|
||||
i18next.t("fileName:keyName", { arg1: "Hello", arg2: "an example", ... })
|
||||
);
|
||||
```
|
||||
2. The game looks up the key in the corresponding JSON file for the user's language.
|
||||
```ts
|
||||
// from "en/file-name.json"...
|
||||
"keyName": "{{arg1}}! This is {{arg2}} of translated text!"
|
||||
```
|
||||
If the key doesn't exist for the given language, the game will default to an appropriate fallback (usually the corresponding English key).
|
||||
3. The game shows the translated text to the user.
|
||||
```ts
|
||||
"Hello! This is an example of translated text!"
|
||||
```
|
||||
|
||||
# Submitting Locales Changes
|
||||
If you have a feature or enhancement that requires additions or changes to in-game text, you will need to make a fork of the `pokerogue-locales` repo and submit your text changes as a pull request _in addition_ to your pull request to the main project. \
|
||||
Since these two PRs aren't _technically_ linked, it's important to coordinate with the Translation Team to ensure that both PRs are integrated safely into the project.
|
||||
|
||||
> [!CAUTION]
|
||||
> **DO NOT HARDCODE PLAYER-FACING TEXT INTO THE CODE!**
|
||||
|
||||
## Making Changes
|
||||
|
||||
One perk of submodules is you don't actually _need_ to clone the locales repository to start contributing - initializing the submodule already does that for you.
|
||||
|
||||
Given `pokerogue-locales` is a full-fledged `git` repository _inside_ `pokerogue`, making changes is roughly the same as normal, merely using `public/locales` as your root directory.
|
||||
|
||||
> [!IMPORTANT]
|
||||
> Make sure to checkout or rebase onto `upstream/HEAD` **BEFORE** creating a PR! \
|
||||
> The checked-out commit is based on the superproject's SHA-1 by default, so hastily making changes may see you basing your commits on last week's `HEAD`.
|
||||
|
||||
## Requirements for Adding Translated Text
|
||||
When your new feature or enhancement requires adding a new locales key **without changing text in existing keys**, we require the following workflow with regards to localization:
|
||||
1. You (the developer) make a pull request to the main repository for your new feature.
|
||||
If this feature requires new text, the text should be integrated into the code with a new `i18next` key pointing to where you plan to add it into the locales repository.
|
||||
2. You then make another pull request — this time to the `pokerogue-locales` repository — adding a new entry with text for each key you added to your main PR.
|
||||
- You must add the corresponding **English keys** while making the PR; the Translation Team can take care of the rest[^2].
|
||||
- For any feature pulled from the mainline Pokémon games (e.g. a Move or Ability implementation), it's best practice to include a source link for any added text. \
|
||||
[Poké Corpus](https://abcboy101.github.io/poke-corpus/) is a great resource for finding text from the mainline games; otherwise, a video/picture showing the text being displayed should suffice.
|
||||
- You should also [notify the current Head of Translation](#notifying-translation) to ensure a fast response.
|
||||
3. At this point, you may begin [testing locales integration in your main PR](#filming-locales-changes).
|
||||
4. The Translation Team will approve the locale PR (after corrections, if necessary), then merge it into `pokerogue-locales`.
|
||||
5. The Dev Team will approve your main PR for your feature, then merge it into PokéRogue's beta environment.
|
||||
|
||||
[^2]: For those wondering, the reason for choosing English specifically is due to it being the master language set in Pontoon (the program used by the Translation Team to perform locale updates).
|
||||
If a key is present in any language _except_ the master language, it won't appear anywhere else in the translation tool, rendering missing English keys quite a hassle.
|
||||
|
||||
### Requirements for Modifying Translated Text
|
||||
|
||||
PRs that modify existing text have different risks with respect to coordination between development and translation, so their requirements are slightly different:
|
||||
- As above, you set up 2 PRs: one for the feature itself in the main repo, and another for the associated locales changes in the locale repo.
|
||||
- Now, however, you need to have your main PR be approved by the Dev Team **before** your corresponding locale changes are merged in.
|
||||
- After your main PR is approved, the Translation Team will merge your locale PR, and you may update the submodule and post video evidence of integration into the **locales PR**.
|
||||
- A Lead or Senior Translator from the Translation Team will then approve your main PR (if all is well), clearing your feature for merging into `beta`.
|
||||
|
||||
## Filming Locales Changes
|
||||
|
||||
After making a PR involving any outwards-facing behavior (but _especially_ locales-related ones), it's generally considered good practice to attach a video of those changes working in-game.
|
||||
|
||||
Basic procedure:
|
||||
<!-- TODO: Update links after contributing.md PR -->
|
||||
1. Update your locales submodule to point to **the branch you used to make the locales PR**. \
|
||||
Many IDEs with `git` integration support doing this from the GUI, \
|
||||
or you can simply do it via command-line:
|
||||
```bash
|
||||
cd public/locales
|
||||
git checkout your-branch-name-here
|
||||
```
|
||||
2. Set some of the [in-game overrides](../README.md#-faq) inside `overrides.ts` to values corresponding to the interactions being tested.
|
||||
3. Start a local dev server (`npm run start:dev`) and open localhost in your browser.
|
||||
4. Film the locales change being displayed in the recording software of your choice[^2].
|
||||
|
||||
[^2]: For those lacking a screen capture device, [OBS Studio](https://obsproject.com) is a popular open-source option.
|
||||
|
||||
## Notifying Translation
|
||||
Put simply, stating that a PR exists makes it much easier to review and merge.
|
||||
|
||||
The easiest way to do this is by **pinging the current Head of Translation** in the [Discord](https://discord.gg/pokerogue) (ideally in `#dev-corner` or similar).
|
||||
|
||||
<!-- Remember to update this everytime the head of translation changes! -->
|
||||
> [!IMPORTANT]
|
||||
> The current Head of Translation is: \
|
||||
> ** @lugiadrien **
|
||||
|
||||
# Closing Remarks
|
||||
If you have any questions about the developer process for localization, don't hesitate to ask!
|
||||
Feel free to contact us on [Discord](https://discord.gg/pokerogue) - the Dev Team and Translation Team will be happy to answer any questions.
|
Loading…
Reference in New Issue
Block a user