diff --git a/cli/cli.ts b/cli/cli.ts index 6d675b09fec6..9a2f4902ebe1 100644 --- a/cli/cli.ts +++ b/cli/cli.ts @@ -1849,7 +1849,7 @@ function saveThemeJson(cfg: pxt.TargetBundle, localDir?: boolean, packaged?: boo walkDocs(theme.docMenu); if (nodeutil.fileExistsSync("targetconfig.json")) { const targetConfig = nodeutil.readJson("targetconfig.json") as pxt.TargetConfig; - if (targetConfig && targetConfig.galleries) { + if (targetConfig?.galleries) { const docsRoot = nodeutil.targetDir; let gcards: pxt.CodeCard[] = []; let tocmd: string = @@ -1900,6 +1900,25 @@ ${gcards.map(gcard => `[${gcard.name}](${gcard.url})`).join(',\n')} `, { encoding: "utf8" }); } + const multiplayerGames = targetConfig?.multiplayer?.games; + for (const game of (multiplayerGames ?? [])) { + if (game.title) targetStrings[`{id:game-title}${game.title}`] = game.title; + if (game.subtitle) targetStrings[`{id:game-subtitle}${game.subtitle}`] = game.subtitle; + } + + const approvedRepoLib = targetConfig?.packages?.approvedRepoLib; + for (const [extension, repoData] of Object.entries(approvedRepoLib ?? {})) { + for (const tag of (repoData.tags ?? [])) { + targetStrings[`{id:extension-tag}${tag}`] = tag; + } + } + + const builtinExtensionLib = targetConfig?.packages?.builtinExtensionsLib; + for (const [extension, repoData] of Object.entries(builtinExtensionLib ?? {})) { + for (const tag of (repoData.tags ?? [])) { + targetStrings[`{id:extension-tag}${tag}`] = tag; + } + } } // extract strings from editor ["editor", "fieldeditors", "cmds"] diff --git a/multiplayer/src/components/JoinOrHost.tsx b/multiplayer/src/components/JoinOrHost.tsx index 7fc7fb9e78d5..72e41afe64d7 100644 --- a/multiplayer/src/components/JoinOrHost.tsx +++ b/multiplayer/src/components/JoinOrHost.tsx @@ -157,8 +157,8 @@ export default function Render() { return ( diff --git a/webapp/src/extensionsBrowser.tsx b/webapp/src/extensionsBrowser.tsx index 1570830880fc..57a329acaaec 100644 --- a/webapp/src/extensionsBrowser.tsx +++ b/webapp/src/extensionsBrowser.tsx @@ -524,7 +524,7 @@ export const ExtensionsBrowser = (props: ExtensionsProps) => { {categoryNames.map(c =>