Skip to content

Commit 3ca66cb

Browse files
committed
add translate and external part
1 parent c9b6266 commit 3ca66cb

File tree

1 file changed

+37
-1
lines changed

1 file changed

+37
-1
lines changed

CONTRIBUTING.md

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,47 @@ You must use line comments; block comments `/* */` will not work. These fields a
7878

7979
`By` allows you to credit yourself. `Original` is used if the extension is based on another person's work. They both use the same format of `Name` or `Name <https://scratch.mit.edu/users/username>`. Links to places other than Scratch are not allowed at this time. You can repeat both of these as many times as needed, just add another `// By: ...` comment.
8080

81+
## Translations
82+
83+
Extensions should support being translated into any language. The development server and [volunteer translators](https://docs.turbowarp.org/translate) will handle the hard part. The developer's job is to use `Scratch.translate()` for any string that should be translated, such as block text or labels. Here's some examples to explain the idea:
84+
85+
```js
86+
// For simple strings that can be understood without additional context,
87+
// call Scratch.translate with your string directly:
88+
Scratch.translate("stage width")
89+
90+
// The translation system handles block inputs properly, so use the same process:
91+
Scratch.translate("move [STEPS] steps")
92+
93+
// If your string needs some context to understand properly, call
94+
// Scratch.translate with an object:
95+
Scratch.translate({
96+
default: "map",
97+
description: "A map in the computer science sense. Maps keys to values. Sometimes called a dictionary."
98+
})
99+
100+
// If your string needs to fill in a value that isn't known until runtime,
101+
// use a placeholder. Don't try to concatenate strings yourself as that is
102+
// confusing and not all languages have the same grammar structure.
103+
Scratch.translate({
104+
default: "Hello, {name}!",
105+
description: "{name} is replaced with the user's name"
106+
}, {
107+
name: "world"
108+
})
109+
```
110+
111+
All translators will see is the extension's name and description, the English text, and any description you add.
112+
113+
## Third-party libraries
114+
115+
First, try to avoid using third-party libraries if you can. If you must, we have a custom dependency system for extensions called `Scratch.external`. It's somewhat in flux but the type definitions should make it clear enough how to use.
116+
81117
## Adding your extension to the library
82118

83119
Add your extension's path (without `extensions/` and without `.js`) to `extensions/extensions.json`. The order of that list determines the order of the library. Try to put it next to related related extensions if possible.
84120

85-
New extensions do not need an image for the library, but they are encouraged. Put any image in the `images` folder with the same folder name and file name but different file extension as the extension's JavaScript. For example, if your extension's code is in `extensions/TestMuffin/fetch.js`, the image would be `images/TestMuffin/fetch.svg` or `images/TestMuffin/fetch.png`. The homepage generator will find this file automatically. Images are displayed in a 2:1 aspect ratio. SVG (preferred), PNG, or JPG are accepted. PNG or JPG should be 600x300 in resolution. Add attribution to `images/README.md` for yourself and anything not made by you. Images submitted to this repository must be licensed under the [GNU General Public License version 3](licenses/GPL-3.0.txt).
121+
New extensions do not need an image for the library, but they are encouraged. Put any image in the `images` folder with the same folder name and file name but different file extension as the extension's JavaScript. For example, if your extension's code is in `extensions/TestMuffin/fetch.js`, the image would be `images/TestMuffin/fetch.svg` or `images/TestMuffin/fetch.png`. The homepage generator will find this file automatically. Images are displayed in a 2:1 aspect ratio. SVG (preferred), PNG, or JPG are accepted. PNG or JPG should be 600x300 in resolution. Add attribution to `images/README.md` for yourself and anything not made by you. Images submitted to this repository must be licensed under the [GNU General Public License version 3](licenses/GPL-3.0.txt). Avoid text if possible since these images can't be translated.
86122

87123
Most extensions shouldn't need external documentation -- it should be obvious what to do just by looking at the blocks. That said, some do need more explanation. Documentation is written in markdown and placed in the `docs` folder with a similar layout to images. For example, documentation for `extensions/TestMuffin/fetch.js` would be `docs/TestMuffin/fetch.md`. Our version of markdown is extended to allow rendering [scratchblocks](https://scratchblocks.github.io/). Just look at the existing documentation for syntax examples. It's not a perfect experience: block colors have to be manually copied, and icons aren't supported, but it's better than what we had before. Once you put your markdown there, you can set a `docsURI` like `https://extensions.turbowarp.org/TestMuffin/fetch`.
88124

0 commit comments

Comments
 (0)