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 =>