
Security News
The Changelog Podcast: Practical Steps to Stay Safe on npm
Learn the essential steps every developer should take to stay secure on npm and reduce exposure to supply chain attacks.
@bscotch/cl2-string-server-shared
Advanced tools
**⚠️ This package is only useful for [Butterscotch Shenanigans]([text](https://www.bscotch.net/)) developers! ⚠️**
⚠️ This package is only useful for Butterscotch Shenanigans developers! ⚠️
For string management in Crashlands 2, we have a "String Server" for managing user-facing text strings. This server is primarily used for:
This package provides shared utilities for use by the String Server and related tools.
Install:
pnpm add @bscotch/cl2-string-server-sharednpm install @bscotch/cl2-string-server-shared
import { Client } from '@bscotch/cl2-string-server-shared';
const client = new Client({
baseUrl: process.env.CL2_STRING_SERVER_BASE_URL,
user: process.env.CL2_STRING_SERVER_ROOT_USER,
password: process.env.CL2_STRING_SERVER_ROOT_PASS,
});
// Load the strings to send off
const filePath = './path/to/exported/strings.json';
const strings = JSON.parse(await fs.readFile(filePath, 'utf8'));
const filePath = './path/to/exported/strings.json';
const strings = JSON.parse(await fs.readFile(filePath, 'utf8'));
// (In this case the file's data has a different format than we need)
await client.commitStrings('crashlands-2', {
branchId: file.branch_name,
commitNumber: file.version,
strings: file.strings.map((string) => ({
id: string.key,
sortKey: string.sort_key,
text: string.text,
immutable: !string.tags.includes('gamechanger'),
maxCharacters:
typeof string.character_limit === 'number'
? string.character_limit
: undefined,
})),
});
const xliff = await client.getXliff('crashlands-2', 'develop');
await fs.writeFile('crashlands-2.xliff', xliff);
import {Glossary, Client} from '@bscotch/cl2-string-server-shared';
const client = new Client({/* credentials */});
const glossary = await Glossary.create(client, 'crashlands-2');
const words = glossary.parse("Some string with a bunch of user-facing game text");
const checkedWords = words.map(word=>glossary.checkWord(word));
console.log("Invalid words", checkedWords.filter(word=>!word.valid));
Glossary terms are synced to the String Server so that they are centralized!
Terms can be flagged as case-sensitive or case-insensitive, but other forms of the word (plurals, alternate spellings, etc) must be added as separate terms.
await glossary.addTerm("Norb", "Something that definitely is not an orb.")
FAQs
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Learn the essential steps every developer should take to stay secure on npm and reduce exposure to supply chain attacks.

Security News
Experts push back on new claims about AI-driven ransomware, warning that hype and sponsored research are distorting how the threat is understood.

Security News
Ruby's creator Matz assumes control of RubyGems and Bundler repositories while former maintainers agree to step back and transfer all rights to end the dispute.