LanguageSelect.astro 941 B

1234567891011121314151617181920212223242526272829
  1. ---
  2. import config from "virtual:starlight/user-config"
  3. import StarlightLanguageSelect from "@astrojs/starlight/components/LanguageSelect.astro"
  4. const locales = Object.keys(config.locales ?? {})
  5. ---
  6. <opencode-language-select data-locales={JSON.stringify(locales)}>
  7. <StarlightLanguageSelect />
  8. </opencode-language-select>
  9. <script>
  10. document.addEventListener("change", (event) => {
  11. if (!(event.target instanceof HTMLSelectElement)) return
  12. const wrapper = event.target.closest("opencode-language-select")
  13. if (!(wrapper instanceof HTMLElement)) return
  14. const locales = JSON.parse(wrapper.dataset.locales ?? "[]") as string[]
  15. const locale = locales[event.target.selectedIndex]
  16. if (!locale) return
  17. document.cookie = `oc_locale=${encodeURIComponent(locale === "root" ? "en" : locale)}; Path=/; Max-Age=31536000; SameSite=Lax`
  18. })
  19. </script>
  20. <style>
  21. opencode-language-select {
  22. display: contents;
  23. }
  24. </style>