Skip to content

feat(ui): add description and identity claims to governance cards#2198

Open
howwohmm wants to merge 1 commit intonpmx-dev:mainfrom
howwohmm:feat/governance-card-identity
Open

feat(ui): add description and identity claims to governance cards#2198
howwohmm wants to merge 1 commit intonpmx-dev:mainfrom
howwohmm:feat/governance-card-identity

Conversation

@howwohmm
Copy link
Contributor

Summary

Closes #1564

  • Adds a bio/description line to governance member cards on the about page (truncated with title tooltip for overflow)
  • Adds social identity claim icons (X/Twitter, Bluesky, Mastodon, LinkedIn, Discord, YouTube) linking to each member's profiles
  • Replaces the existing fetchSponsorable GraphQL query with a broader fetchGovernanceProfiles that fetches bio, twitterUsername, and socialAccounts in a single request — no extra API calls
  • Gracefully degrades when no GitHub token is available (cards still show login, role, and sponsor link as before)

What changed

server/api/contributors.get.ts

  • New SocialAccount interface exported alongside Role and GitHubContributor
  • GitHubContributor now includes bio, twitterUsername, and socialAccounts fields
  • fetchSponsorablefetchGovernanceProfiles: same single GraphQL batch query, now also fetches bio, twitterUsername, and socialAccounts(first: 10)

app/pages/about.vue

  • Social icon mapping (socialIcons) and getSocialLinks() helper to deduplicate Twitter username vs social accounts
  • Bio line shown below the role label (truncated, title attribute for full text)
  • Row of social link icons next to the sponsor link, using existing i-simple-icons:* and i-lucide:* icon sets

Test plan

  • Verify governance cards show bio text when available
  • Verify social icons render and link correctly (X, Bluesky, Mastodon, etc.)
  • Verify cards still render correctly when GitHub token is unavailable (fallback path)
  • Verify sponsor link still works alongside social icons
  • Check mobile layout — cards should remain compact

🤖 Generated with Claude Code

@vercel
Copy link

vercel bot commented Mar 22, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
docs.npmx.dev Ready Ready Preview, Comment Mar 24, 2026 4:10pm
npmx.dev Ready Ready Preview, Comment Mar 24, 2026 4:10pm
1 Skipped Deployment
Project Deployment Actions Updated (UTC)
npmx-lunaria Ignored Ignored Mar 24, 2026 4:10pm

Request Review

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 22, 2026

📝 Walkthrough

Walkthrough

The PR adds social-account support and bios for governance contributors. Frontend changes (app/pages/about.vue) introduce provider→icon/name lookups and helpers to derive ordered { provider, url, icon } links from person.socialAccounts, render a truncated person.bio when present, and show sponsor and social external links only when sponsors_url/social data exist, with proper target, rel, icon classes and ARIA labels. Backend changes (server/api/contributors.get.ts) add a SocialAccount type, extend GitHubContributor with bio and socialAccounts, and replace the sponsors-only GraphQL helper with fetchGovernanceProfiles returning sponsors/bio/social data. i18n adds a about.team.social_link_aria template.

Possibly related PRs

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Out of Scope Changes check ❓ Inconclusive The pull request includes extensive i18n changes (adding translation keys across 18 locale files, schema updates) and UnoCSS configuration changes that extend beyond the core feature scope of governance card enhancements. While these support the new feature, the scale of i18n updates warrants clarification. Clarify whether the extensive i18n translations and schema changes are necessary for the MVP or if they should be deferred to a separate localisation effort. Consider whether UnoCSS safelist additions are the minimal required approach.
✅ Passed checks (2 passed)
Check name Status Explanation
Description check ✅ Passed The pull request description clearly explains the feature being added: bio/description lines and social identity claim icons for governance member cards, with details on file changes and test plan.
Linked Issues check ✅ Passed The pull request implements all core requirements from issue #1564: adds truncated bio/description lines to governance cards, renders social identity claim icons (X/Twitter, Bluesky, Mastodon, LinkedIn, Discord, YouTube) linking to member profiles, and maintains existing sponsor link and card compactness.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (1)
server/api/contributors.get.ts (1)

222-233: Return a fresh object instead of mutating c and casting it.

Object.assign(c, ...) changes a GitHubAPIContributor into a wider shape and then hides the mismatch with a cast. Returning a new object keeps this mapper genuinely type-safe and easier to extend.

♻️ Proposed refactor
     return filtered
-      .map(c => {
+      .map((c): GitHubContributor & { order: number } => {
         const { role, order } = getRoleInfo(c.login, teams)
         const profile = governanceProfiles.get(c.login)
         const sponsors_url = profile?.hasSponsorsListing
           ? `https://github.com/sponsors/${c.login}`
           : null
         const bio = profile?.bio ?? null
         const twitterUsername = profile?.twitterUsername ?? null
         const socialAccounts = profile?.socialAccounts ?? []
-        Object.assign(c, { role, order, sponsors_url, bio, twitterUsername, socialAccounts })
-        return c as GitHubContributor & { order: number }
+        return {
+          ...c,
+          role,
+          order,
+          sponsors_url,
+          bio,
+          twitterUsername,
+          socialAccounts,
+        }
       })

As per coding guidelines, "Ensure you write strictly type-safe code".


ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 1b543fcc-a4bf-42e0-a636-4f3779dfe564

📥 Commits

Reviewing files that changed from the base of the PR and between 7f2fc1a and e7100cc.

📒 Files selected for processing (2)
  • app/pages/about.vue
  • server/api/contributors.get.ts

@codecov
Copy link

codecov bot commented Mar 22, 2026

Comment on lines +17 to +18
twitterUsername: string | null
socialAccounts: SocialAccount[]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

twitter/x should just be in this social accounts array too

@howwohmm
Copy link
Contributor Author

addressed your feedback:

  • unified twitterUsername into the socialAccounts array (removed the separate field entirely)
  • replaced Object.assign with spread return
  • added i18n for social link aria-labels
  • added error logging for GraphQL responses

the sponsors_url fallback is correct as-is — when no token is available, profile is undefined so null is returned gracefully.

@github-actions
Copy link

github-actions bot commented Mar 24, 2026

Lunaria Status Overview

🌕 This pull request will trigger status changes.

Learn more

By default, every PR changing files present in the Lunaria configuration's files property will be considered and trigger status changes accordingly.

You can change this by adding one of the keywords present in the ignoreKeywords property in your Lunaria configuration file in the PR's title (ignoring all files) or by including a tracker directive in the merged commit's description.

Tracked Files

File Note
i18n/locales/ar.json Localization changed, will be marked as complete. 🔄️
i18n/locales/az-AZ.json Localization changed, will be marked as complete. 🔄️
i18n/locales/bg-BG.json Localization changed, will be marked as complete. 🔄️
i18n/locales/bn-IN.json Localization changed, will be marked as complete. 🔄️
i18n/locales/cs-CZ.json Localization changed, will be marked as complete. 🔄️
i18n/locales/de-AT.json Localization removed, will be marked as missing. 🔄️
i18n/locales/de-DE.json Localization changed, will be marked as complete. 🔄️
i18n/locales/de.json Localization removed, will be marked as missing. 🔄️
i18n/locales/en.json Source changed, localizations will be marked as outdated.
i18n/locales/es.json Localization changed, will be marked as complete. 🔄️
i18n/locales/fr-FR.json Localization changed, will be marked as complete. 🔄️
i18n/locales/hi-IN.json Localization changed, will be marked as complete. 🔄️
i18n/locales/hu-HU.json Localization changed, will be marked as complete. 🔄️
i18n/locales/id-ID.json Localization changed, will be marked as complete. 🔄️
i18n/locales/it-IT.json Localization changed, will be marked as complete. 🔄️
i18n/locales/ja-JP.json Localization changed, will be marked as complete. 🔄️
i18n/locales/kn-IN.json Localization changed, will be marked as complete. 🔄️
i18n/locales/mr-IN.json Localization changed, will be marked as complete. 🔄️
i18n/locales/nb-NO.json Localization changed, will be marked as complete. 🔄️
i18n/locales/ne-NP.json Localization changed, will be marked as complete. 🔄️
i18n/locales/pl-PL.json Localization changed, will be marked as complete. 🔄️
i18n/locales/pt-BR.json Localization changed, will be marked as complete. 🔄️
i18n/locales/ru-RU.json Localization changed, will be marked as complete. 🔄️
i18n/locales/ta-IN.json Localization changed, will be marked as complete. 🔄️
i18n/locales/te-IN.json Localization changed, will be marked as complete. 🔄️
i18n/locales/tr-TR.json Localization changed, will be marked as complete. 🔄️
i18n/locales/uk-UA.json Localization changed, will be marked as complete. 🔄️
i18n/locales/zh-CN.json Localization changed, will be marked as complete. 🔄️
i18n/locales/zh-TW.json Localization changed, will be marked as complete. 🔄️
Warnings reference
Icon Description
🔄️ The source for this localization has been updated since the creation of this pull request, make sure all changes in the source have been applied.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
app/pages/about.vue (1)

269-290: Avoid calling getSocialLinks(person) twice per card.

The function is invoked both for the v-if check (line 270) and the v-for loop (line 274), creating redundant iterations for each governance member. Consider extracting the result to avoid duplicate computation.

♻️ Suggested refactor using a computed or inline variable

One option is to use a small helper component or restructure to compute once. Alternatively, if you want to keep it inline, you could use a v-for with a length check:

-                    <div
-                      v-if="getSocialLinks(person).length"
-                      class="relative z-10 flex items-center gap-1"
-                    >
-                      <a
-                        v-for="link in getSocialLinks(person)"
+                    <template
+                      v-for="(links, index) in [getSocialLinks(person)]"
+                      :key="index"
+                    >
+                      <div
+                        v-if="links.length"
+                        class="relative z-10 flex items-center gap-1"
+                      >
+                        <a
+                          v-for="link in links"

Or extract to a computed property that maps all governance members to their social links.

server/api/contributors.get.ts (1)

225-244: Consider restructuring to avoid object spread in map.

The static analysis tool flags spreading to modify object properties in map calls as inefficient. While the impact is minimal for this array size, you could restructure to directly construct the object.

♻️ Suggested refactor
     return filtered
-      .map((c): GitHubContributor & { order: number } => {
+      .map((c): GitHubContributor & { order: number } => ({
         const { role, order } = getRoleInfo(c.login, teams)
         const profile = governanceProfiles.get(c.login)
-        // When profile data is unavailable (e.g., no token), sponsors_url is null.
-        const sponsors_url = profile
+        login: c.login,
+        id: c.id,
+        avatar_url: c.avatar_url,
+        html_url: c.html_url,
+        contributions: c.contributions,
+        role,
+        order,
+        sponsors_url: profile
           ? profile.hasSponsorsListing
             ? `https://github.com/sponsors/${c.login}`
             : null
-          : null
-        const bio = profile?.bio ?? null
-        const socialAccounts = profile?.socialAccounts ?? []
-        return {
-          ...c,
-          role,
-          order,
-          sponsors_url,
-          bio,
-          socialAccounts,
-        }
-      })
+          : null,
+        bio: profile?.bio ?? null,
+        socialAccounts: profile?.socialAccounts ?? [],
+      }))

Alternatively, keep the current structure if readability is preferred over the minor performance gain.


ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: c58344d3-fb93-47bc-97be-2ce178a6c9ef

📥 Commits

Reviewing files that changed from the base of the PR and between e7100cc and 35a73b7.

📒 Files selected for processing (3)
  • app/pages/about.vue
  • i18n/locales/en.json
  • server/api/contributors.get.ts
✅ Files skipped from review due to trivial changes (1)
  • i18n/locales/en.json

Comment on lines +228 to 234
// Fall back to REST-derived sponsors URL so the CTA remains available
// even in tokenless (preview) environments where GraphQL is skipped.
const sponsors_url = profile
? profile.hasSponsorsListing
? `https://github.com/sponsors/${c.login}`
: null
: null
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Misleading comment: no REST-derived fallback exists.

The comment states "Fall back to REST-derived sponsors URL" but when profile is undefined (tokenless environments), sponsors_url is set to null. There's no actual REST-derived fallback implemented. Either remove the misleading comment or implement a fallback (e.g., constructing the URL directly since the GitHub REST contributors endpoint doesn't include sponsor info).

🔧 Suggested fix: clarify the comment
-        // Fall back to REST-derived sponsors URL so the CTA remains available
-        // even in tokenless (preview) environments where GraphQL is skipped.
+        // When profile data is unavailable (e.g., no token), sponsors_url is null.
+        // The sponsor CTA will not be shown in tokenless environments.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
// Fall back to REST-derived sponsors URL so the CTA remains available
// even in tokenless (preview) environments where GraphQL is skipped.
const sponsors_url = profile
? profile.hasSponsorsListing
? `https://github.com/sponsors/${c.login}`
: null
: null
// When profile data is unavailable (e.g., no token), sponsors_url is null.
// The sponsor CTA will not be shown in tokenless environments.
const sponsors_url = profile
? profile.hasSponsorsListing
? `https://github.com/sponsors/${c.login}`
: null
: null

Display contributor bio and social account links with provider icons
on the about page governance cards. Twitter/X is part of socialAccounts
rather than a separate field. Dynamic icon classes are safelisted in
UnoCSS config.

Fixes npmx-dev#2197
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 20

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
i18n/locales/te-IN.json (1)

16-171: ⚠️ Potential issue | 🟠 Major

Please do not ship EN TEXT TO REPLACE literals in this locale.

These keys will render verbatim for Telugu users instead of falling back, including the new governance/social copy added in this PR. If the translations are not ready yet, it is safer to omit the unfinished entries from this locale file for now.

Based on learnings, "new or changed entries in i18n translation files (locale JSON files) may be omitted from non-English languages."

Also applies to: 181-246, 260-388, 393-559, 582-676, 798-843, 879-941, 998-1010, 1032-1034, 1068-1069, 1090-1434

♻️ Duplicate comments (1)
server/api/contributors.get.ts (1)

220-234: ⚠️ Potential issue | 🟠 Major

Tokenless fallback still drops the sponsor action.

When githubToken is absent, governanceProfiles is always empty, so profile is undefined and sponsors_url stays null for every governance member. That means preview/tokenless deployments cannot show the sponsor link on governance cards, and the inline comment is misleading because there is no REST-derived fallback in this branch. If the UI still needs that CTA in tokenless environments, this branch needs a deterministic fallback instead of null.

🧹 Nitpick comments (1)
app/pages/about.vue (1)

250-254: Only set the bio title when truncation actually happens.

At the moment every bio gets a browser tooltip, even when the full text is already visible. If the intended behaviour is “tooltip on overflow”, bind title only after an overflow check.


ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: c0f936ac-22a3-4979-8191-8a34cd6f6fe1

📥 Commits

Reviewing files that changed from the base of the PR and between 125f9e9 and c83970c.

📒 Files selected for processing (31)
  • app/pages/about.vue
  • i18n/locales/ar.json
  • i18n/locales/az-AZ.json
  • i18n/locales/bg-BG.json
  • i18n/locales/bn-IN.json
  • i18n/locales/cs-CZ.json
  • i18n/locales/de-DE.json
  • i18n/locales/en.json
  • i18n/locales/es.json
  • i18n/locales/fr-FR.json
  • i18n/locales/hi-IN.json
  • i18n/locales/hu-HU.json
  • i18n/locales/id-ID.json
  • i18n/locales/it-IT.json
  • i18n/locales/ja-JP.json
  • i18n/locales/kn-IN.json
  • i18n/locales/mr-IN.json
  • i18n/locales/nb-NO.json
  • i18n/locales/ne-NP.json
  • i18n/locales/pl-PL.json
  • i18n/locales/pt-BR.json
  • i18n/locales/ru-RU.json
  • i18n/locales/ta-IN.json
  • i18n/locales/te-IN.json
  • i18n/locales/tr-TR.json
  • i18n/locales/uk-UA.json
  • i18n/locales/zh-CN.json
  • i18n/locales/zh-TW.json
  • i18n/schema.json
  • server/api/contributors.get.ts
  • uno.config.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • uno.config.ts

"trademark_disclaimer": "npm علامة تجارية مسجلة لشركة npm, Inc. هذا الموقع غير مرتبط بشركة npm, Inc.",
"footer": {
"about": "حول",
"blog": "EN TEXT TO REPLACE: blog",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Prefer locale fallback over committed placeholder copy.

Several newly added keys still contain EN TEXT TO REPLACE: values. Because those keys now exist in this locale, users will see the sentinel verbatim instead of the normal fallback, including the new governance-card label under about.team.social_link_aria. Please either add real Arabic strings or drop these entries until the translations are ready.

Based on learnings, non-English locale files in this repo may omit new keys and rely on fallback translations, so in-band placeholder values are not required.

Also applies to: 91-114, 1010-1010, 1407-1434

Comment on lines +40 to +41
"open_main": "EN TEXT TO REPLACE: Open main information",
"open_diff": "EN TEXT TO REPLACE: Open version differences"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Please avoid committing EN TEXT TO REPLACE strings in this locale.

If the copy is intentionally deferred, omitting these keys is better than shipping placeholder text. As it stands, localised users — and screen readers reading about.team.social_link_aria — will see the placeholder verbatim.

Based on learnings, new or changed entries in i18n translation files may be omitted from non-English languages; translations are not completed in-band in the same PR and are tracked elsewhere.

Also applies to: 99-99, 142-168, 217-229, 309-336, 397-445, 457-457, 482-482, 514-514, 536-537, 559-559, 635-637, 842-843, 905-906, 941-941, 1010-1010, 1090-1109, 1221-1266, 1407-1433

"trademark_disclaimer": "npm е регистрирана търговска марка на npm, Inc. Този сайт не е свързан с npm, Inc.",
"footer": {
"about": "за нас",
"blog": "EN TEXT TO REPLACE: blog",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Remove the remaining placeholder copy before shipping this locale.

This file still contains several EN TEXT TO REPLACE: values. That includes about.team.social_link_aria, which app/pages/about.vue:273-288 uses directly for the new governance social-link ARIA label, so assistive tech would announce the placeholder verbatim. Please translate these entries or drop them so the fallback text is used until the Bulgarian copy is ready.

Based on learnings, non-English locale files in this repo may omit new keys and rely on fallback translations, so in-band placeholder values are not required.

Also applies to: 91-114, 1010-1010, 1220-1266, 1407-1434

Comment on lines +15 to +21
"blog": "EN TEXT TO REPLACE: blog",
"docs": "ডকুমেন্টেশন",
"source": "সোর্স",
"social": "সোশ্যাল",
"chat": "চ্যাট"
"chat": "চ্যাট",
"builders_chat": "EN TEXT TO REPLACE: builders",
"keyboard_shortcuts": "EN TEXT TO REPLACE: keyboard shortcuts"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Please drop the placeholder translations from this file.

EN TEXT TO REPLACE: is still present in newly added Bengali entries, so those strings will be shown verbatim to users and screen readers. The new governance social-link ARIA text on Line 1009 is affected as well. Either add the real translations here or omit these keys until localisation is done.

Based on learnings: In the npmx.dev project, new or changed entries in i18n translation files may be omitted from non-English languages. Translations are not completed in-band in the same PR and are tracked elsewhere.

Also applies to: 1009-1009, 1406-1433

Comment on lines +40 to +41
"open_main": "EN TEXT TO REPLACE: Open main information",
"open_diff": "EN TEXT TO REPLACE: Open version differences"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Please avoid committing EN TEXT TO REPLACE strings in this locale.

If the copy is intentionally deferred, omitting these keys is better than shipping placeholder text. As it stands, localised users — and screen readers reading about.team.social_link_aria — will see the placeholder verbatim.

Based on learnings, new or changed entries in i18n translation files may be omitted from non-English languages; translations are not completed in-band in the same PR and are tracked elsewhere.

Also applies to: 99-99, 142-168, 217-229, 309-336, 397-445, 457-457, 482-482, 514-514, 536-537, 559-559, 635-637, 842-843, 905-906, 941-941, 1010-1010, 1090-1090, 1108-1109, 1221-1266, 1407-1433

Comment on lines +1009 to +1010
"sponsor_aria": "Patrocinador {name} no GitHub",
"social_link_aria": "EN TEXT TO REPLACE: {name} on {platform}"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Replace the placeholder locale text before merging.

about.team.social_link_aria is used by the new icon-only links on /about, so this locale will currently expose EN TEXT TO REPLACE to users and screen readers. The same placeholder marker is present in other changed keys in this file as well. If these translations are not ready yet, please drop the unfinished entries and let the existing English fallback handle them instead.

Based on learnings, "In the npmx.dev project, new or changed entries in i18n translation files (locale JSON files) may be omitted from non-English languages. Translations are not completed in-band in the same PR and are tracked elsewhere. It is acceptable for non-English locale files to be missing keys that exist in English locale files."

Also applies to: 1407-1426

Comment on lines +40 to +41
"open_main": "EN TEXT TO REPLACE: Open main information",
"open_diff": "EN TEXT TO REPLACE: Open version differences"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Remove placeholder locale strings before merge.

This file still checks in literal EN TEXT TO REPLACE: values. Those are treated as real translations, so Turkish users and screen readers will see the placeholder text verbatim — including the new governance social-link ARIA label on Line 1010. Please either provide real translations or omit these entries until localisation catches up.

Based on learnings: In the npmx.dev project, new or changed entries in i18n translation files may be omitted from non-English languages. Translations are not completed in-band in the same PR and are tracked elsewhere.

Also applies to: 1010-1010, 1407-1434

Comment on lines +1009 to +1010
"sponsor_aria": "Спонсорувати {name} на GitHub",
"social_link_aria": "EN TEXT TO REPLACE: {name} on {platform}"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Don't ship placeholder copy for the new social-link ARIA label.

about.team.social_link_aria will render the literal EN TEXT TO REPLACE... string for Ukrainian users, and because the key exists they will not fall back to the default locale. Please either provide the final translation here or omit the key until localisation lands.

Based on learnings, "It is acceptable for non-English locale files to be missing keys that exist in English locale files."

},
"draft_badge": "草稿",
"draft_banner": "这是一篇未发布的草稿。内容可能不完整或包含不准确的信息。",
"no_posts": "EN TEXT TO REPLACE: No posts found.",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Avoid shipping raw placeholder markers in zh-CN.

There are still multiple EN TEXT TO REPLACE literals here, including about.team.social_link_aria for the new governance social links. Since missing non-English keys are acceptable in this repo, dropping unfinished entries is better than surfacing placeholder markers to Simplified Chinese users.

Based on learnings, "new or changed entries in i18n translation files (locale JSON files) may be omitted from non-English languages."

Also applies to: 150-168, 228-229, 309-336, 421-425, 457-457, 559-559, 635-636, 906-906, 1010-1010, 1221-1227, 1256-1266, 1407-1427

},
"draft_badge": "草稿",
"draft_banner": "這是尚未發佈的草稿。內容可能不完整或包含不準確的資訊。",
"no_posts": "EN TEXT TO REPLACE: No posts found.",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Avoid shipping raw placeholder markers in zh-TW.

Several new keys are still EN TEXT TO REPLACE literals, including about.team.social_link_aria for the governance social icons. Because the key exists, users will see the marker text rather than a normal fallback. Please translate these values or drop the unfinished keys for now.

Based on learnings, "new or changed entries in i18n translation files (locale JSON files) may be omitted from non-English languages."

Also applies to: 150-168, 228-229, 309-336, 421-425, 457-457, 559-559, 635-636, 906-906, 1010-1010, 1090-1090, 1221-1227, 1256-1266, 1407-1427

@ghostdevv
Copy link
Contributor

Looks like your rebase/merge got a little messed up? @howwohmm

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: core team in /about, with description and identity claims

3 participants