Skip to content

Commit ea85b01

Browse files
main to live - Jan 19, 2026 (#3698)
* Delay the kick-off date for the webplat relnotes (#3697) * Add "If single locale but multiple languages" in "Publish extension" (#3690) * initial * localtoc * format keywords * try move Support down * apply 2 ans's * tag the fields * , * entire placeholders --------- Co-authored-by: Michael Hoffman <45407486+mikehoffms@users.noreply.github.com>
2 parents 214dd55 + 520947c commit ea85b01

2 files changed

Lines changed: 64 additions & 21 deletions

File tree

microsoft-edge/extensions/publish/publish-extension.md

Lines changed: 39 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,14 @@ If you have an existing Chrome extension and you want to release it for Microsof
3939
* [Fix any form field errors](#fix-any-form-field-errors)
4040
* [Step 7: Provide testing notes and submit the extension](#step-7-provide-testing-notes-and-submit-the-extension)
4141
* [Resolve any Partner Center errors](#resolve-any-partner-center-errors)
42+
* [If a single locale appears but the package includes multiple languages](#if-a-single-locale-appears-but-the-package-includes-multiple-languages)
4243
* [If the extension is flagged as potentially malware](#if-the-extension-is-flagged-as-potentially-malware)
43-
* [Support](#support)
4444
* [Responsible AI for the AI-generated description of an extension](#responsible-ai-for-the-ai-generated-description-of-an-extension)
4545
* [Process of using the AI-generated description feature](#process-of-using-the-ai-generated-description-feature)
4646
* [Inputs used for the AI-generated description](#inputs-used-for-the-ai-generated-description)
4747
* [How the AI-generated description feature was evaluated](#how-the-ai-generated-description-feature-was-evaluated)
4848
* [Safeguards for the AI-generated description](#safeguards-for-the-ai-generated-description)
49+
* [Support](#support)
4950
* [See also](#see-also)
5051

5152

@@ -459,21 +460,40 @@ For such errors, try the following fixes:
459460

460461

461462
<!-- ========================================================================== -->
462-
## If the extension is flagged as potentially malware
463+
## If a single locale appears, but the package includes multiple languages
463464

464-
If the extension is flagged as malware or a potentially unwanted application (PUA), review [1.2.2 Unwanted and malicious software](/legal/microsoft-edge/extensions/developer-policies#122-unwanted-and-malicious-software) in _Developer policies for the Microsoft Edge Add-ons store_.
465+
Sometimes only one locale appears in the **Store Listings** tab at Partner Center, even though an extension's package includes multiple languages. This happens when the manifest file uses hardcoded strings instead of localized message references.
465466

466-
Make sure that your extension's code and functionality complies with all requirements and guidelines. For security reasons, Microsoft doesn't disclose exact triggers.
467+
To ensure that all supported locales are detected:
467468

469+
* Update your `manifest.json` file by replacing the `name` and `description` fields with i18n placeholders:
468470

469-
<!-- ========================================================================== -->
470-
## Support
471+
```
472+
{
473+
"manifest_version": 3,
474+
"name": "__MSG_extensionName__",
475+
"description": "__MSG_extensionDescription__"
476+
}
477+
```
471478

472-
If you experience issues when registering as an extension developer or when submitting an extension, you can:
479+
* Include a `default_locale` in your manifest, such as `"default_locale": "en"`.
473480

474-
* Enter a support ticket through [Extensions New Support Request](https://support.microsoft.com/supportrequestform/e7a381be-9c9a-fafb-ed76-262bc93fd9e4).
481+
* Make sure your `_locales` folder contains a properly structured `messages.json` file for each language. Partner Center uses these message references to identify available languages. If these message references are missing, the language will be skipped.
475482

476-
* [Contact the Microsoft Edge extensions team](../contact.md).
483+
The message references are the i18n `"name"` and `"description"` keys in each `/_locales/messages.json` file. These message references (i18n keys) correspond to the `"__MSG_extensionName__"` and `"__MSG_extensionDescription__"` placeholders that are used in the `"name"` and `"description"` fields of the `manifest.json` file. Partner Center uses these message references to determine which languages are available.
484+
485+
See also:
486+
* [chrome.i18n](https://developer.chrome.com/docs/extensions/reference/api/i18n) - API to implement internationalization throughout an app or extension.
487+
* [Manifest file format for extensions](../getting-started/manifest-format.md)
488+
* [Manifest file format](https://developer.chrome.com/docs/extensions/reference/manifest) in Chrome docs.
489+
490+
491+
<!-- ========================================================================== -->
492+
## If the extension is flagged as potentially malware
493+
494+
If the extension is flagged as malware or a potentially unwanted application (PUA), review [1.2.2 Unwanted and malicious software](/legal/microsoft-edge/extensions/developer-policies#122-unwanted-and-malicious-software) in _Developer policies for the Microsoft Edge Add-ons store_.
495+
496+
Make sure that your extension's code and functionality complies with all requirements and guidelines. For security reasons, Microsoft doesn't disclose exact triggers.
477497

478498

479499
<!-- ========================================================================== -->
@@ -534,6 +554,16 @@ The following safeguards are in place for the AI-generated description:
534554
* You have full control over the AI-generated description, and can choose to use it as-is, edit it, or discard it.
535555

536556

557+
<!-- ========================================================================== -->
558+
## Support
559+
560+
If you experience issues when registering as an extension developer or when submitting an extension, you can:
561+
562+
* Enter a support ticket through [Extensions New Support Request](https://support.microsoft.com/supportrequestform/e7a381be-9c9a-fafb-ed76-262bc93fd9e4).
563+
564+
* [Contact the Microsoft Edge extensions team](../contact.md).
565+
566+
537567
<!-- ========================================================================== -->
538568
## See also
539569
<!-- all links in article -->

scripts/web-platform-release-notes.js

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,22 @@ import fs from "fs/promises";
77
import playwright from "playwright";
88
import { execSync } from 'child_process';
99

10+
// If the number of days before the next Beta is lower or equal to DAYS_NUMBER_BEFORE_RELNOTES_NOTICE
11+
// then we start generating the Beta release notes.
12+
// This gives us time to edit, review, and publish the Beta release notes before Beta comes out.
13+
// This number used to be 15, which was too much because features were still moving in and out of
14+
// the next Beta milestone on chromestatus.com.
15+
// The number is now set to 7 days, which should reduce the number of last-minute changes we need to do.
16+
const DAYS_NUMBER_BEFORE_RELNOTES_NOTICE = 7;
17+
1018
// Where to find Edge-only origin trials info.
1119
const EDGE_OT_ROOT = "https://developer.microsoft.com/en-us";
1220
const EDGE_OT_PAGE = `${EDGE_OT_ROOT}/microsoft-edge/origin-trials/trials`;
13-
// If Beta becomes stable within the next N coming days, generate the release notes for Canary.
14-
// This way, the release notes are ready for when Canary becomes Beta.
15-
const DAYS_NUMBER_BEFORE_RELNOTES_NOTICE = 15;
21+
1622
// The prefix to use when creating a new git branch for the release notes draft.
1723
const BRANCH_NAME_PREFIX = "web-platform-release-notes-";
1824

25+
// Call a chromestatus.com API endpoint and return the parsed JSON data.
1926
async function fetchChromeStatusAPI(url) {
2027
const response = await fetch(url);
2128
let text = await response.text();
@@ -24,6 +31,7 @@ async function fetchChromeStatusAPI(url) {
2431
return data;
2532
}
2633

34+
// Format a date string as "Month Day, Year", e.g., "January 15, 2024".
2735
function longDate(dateString) {
2836
const date = new Date(dateString);
2937
return date.toLocaleString("en-US", {
@@ -33,6 +41,7 @@ function longDate(dateString) {
3341
});
3442
}
3543

44+
// Execute a shell command and return the stdout as a string.
3645
async function execute(cmd) {
3746
try {
3847
const stdout = await execSync(cmd);
@@ -44,7 +53,8 @@ async function execute(cmd) {
4453
}
4554
}
4655

47-
async function releaseNotesAlreadyExists(version) {
56+
// Check if the release notes for the given version already exist in the main branch.
57+
async function doesReleaseNotesAlreadyExist(version) {
4858
const response = await fetch(`https://raw.githubusercontent.com/MicrosoftDocs/edge-developer/refs/heads/main/microsoft-edge/web-platform/release-notes/${version}.md`);
4959

5060
// Github.com normally responds with 404 if the file doesn't exist. So this should catch it.
@@ -57,7 +67,8 @@ async function releaseNotesAlreadyExists(version) {
5767
return text.includes(`Microsoft Edge ${version} web platform release notes`);
5868
}
5969

60-
async function releaseNotesDraftAlreadyExists(version, branchName) {
70+
// Check if a draft release notes for the given version already exist in the given branch.
71+
async function doesReleaseNotesDraftExist(version, branchName) {
6172
const response = await fetch(`https://raw.githubusercontent.com/MicrosoftDocs/edge-developer/refs/heads/${branchName}/microsoft-edge/web-platform/release-notes/${version}.md`);
6273

6374
// Github.com normally responds with 404 if the file doesn't exist. So this should catch it.
@@ -70,10 +81,7 @@ async function releaseNotesDraftAlreadyExists(version, branchName) {
7081
return text.includes(`Microsoft Edge ${version} web platform release notes`);
7182
}
7283

73-
function getReleaseNoteMDFilePath(version, branchName) {
74-
return `https://github.com/MicrosoftDocs/edge-developer/blob/${branchName}/microsoft-edge/web-platform/release-notes/${version}.md`;
75-
}
76-
84+
// Get the list of currently active Edge-only origin trials by scraping the Edge OT page.
7785
async function getActiveEdgeOTs() {
7886
const scrapingBrowser = await playwright.chromium.launch({ headless: true });
7987
const context = await scrapingBrowser.newContext();
@@ -158,6 +166,7 @@ async function getActiveEdgeOTs() {
158166
return ots;
159167
}
160168

169+
// Main entry point to this script.
161170
async function main() {
162171
// --------------------------------------------------
163172
// 1. Check which is the next release (first date that's in the future compared to today).
@@ -212,13 +221,13 @@ async function main() {
212221
// 2. Check if there isn't already a published or draft release notes for the next beta version.
213222
// --------------------------------------------------
214223

215-
const alreadyExists = await releaseNotesAlreadyExists(nextBetaVersion);
224+
const alreadyExists = await doesReleaseNotesAlreadyExist(nextBetaVersion);
216225
if (alreadyExists) {
217226
console.error(`Release notes for the next beta version ${nextBetaVersion} already exist.`);
218227
process.exit(0);
219228
}
220229

221-
const draftAlreadyExists = await releaseNotesDraftAlreadyExists(nextBetaVersion, branchName);
230+
const draftAlreadyExists = await doesReleaseNotesDraftExist(nextBetaVersion, branchName);
222231
if (draftAlreadyExists) {
223232
console.error(`Draft release notes for the next beta version ${nextBetaVersion} already exist on the ${branchName} branch.`);
224233
process.exit(0);
@@ -363,8 +372,12 @@ async function main() {
363372
// --------------------------------------------------
364373

365374
console.log("Opening an issue to notify the team about the new release notes draft.");
375+
376+
const fileSourceLink = `https://github.com/MicrosoftDocs/edge-developer/blob/${branchName}/microsoft-edge/web-platform/release-notes/${nextBetaVersion}.md`;
377+
366378
const title = `Microsoft Edge Beta ${nextBetaVersion} web platform release notes ready for review`;
367-
const body = `The release notes draft for the next Microsoft Edge beta version ${nextBetaVersion} has been generated in [${nextBetaVersion}.md](${getReleaseNoteMDFilePath(nextBetaVersion, branchName)}) on the ${branchName} branch.\n\nPlease [create a pull request](https://github.com/MicrosoftDocs/edge-developer/compare/main...${branchName}), update the content as needed, and close this issue.`;
379+
let body = `The release notes draft for the next Microsoft Edge beta version ${nextBetaVersion} has been generated in [${nextBetaVersion}.md](${fileSourceLink}) on the ${branchName} branch.\n\n`;
380+
body += `Please [create a pull request](https://github.com/MicrosoftDocs/edge-developer/compare/main...${branchName}), update the content as needed, and then close this issue.`;
368381

369382
const octokit = github.getOctokit(process.env.token);
370383
await octokit.rest.issues.create({

0 commit comments

Comments
 (0)