Coder Social home page Coder Social logo

Comments (15)

angrypie avatar angrypie commented on May 18, 2024 5

@osk you can use changeLocale("") as workaround.

from gatsby-plugin-intl.

theowenyoung avatar theowenyoung commented on May 18, 2024 2

I also publish a updated package: https://www.npmjs.com/package/gatsby-plugin-react-intl

from gatsby-plugin-intl.

aengl avatar aengl commented on May 18, 2024 2

@vlknhslk @renepardon The redirectDefaultLanguageToRoot was added by @theowenyoung on his fork, it's not part of the official version. You'll have to change to gatsby-plugin-react-intl to make use of it.

Linking the PR here to avoid confusion: #118

from gatsby-plugin-intl.

vlknhslk avatar vlknhslk commented on May 18, 2024 1

Is there any example for this?

from gatsby-plugin-intl.

hoangbaovu avatar hoangbaovu commented on May 18, 2024

I'm handle onClick set locale

const handleChangeLocale = language => {
    if(language === 'en') {
      changeLocale("")
    } else {
      changeLocale(language)
    }
  }

<IntlContextConsumer>
  {({ languages, language: currentLocale }) => {
  return (
    languages.map(language => (
      <MenuItem 
        key={language}
        onClick={() => handleChangeLocale(language)}
        selected={ currentLocale === language }
      >
        {currentLocale}
        {intl.formatMessage({ id: LANGUAGE[language].name })}
      </MenuItem>
    ))
  )}
}
</IntlContextConsumer>

from gatsby-plugin-intl.

vlknhslk avatar vlknhslk commented on May 18, 2024

This is mine below. How do I adapt yours :( @hoangbaovu ?

import React from "react"
import { Button } from "antd"
import { IntlContextConsumer, changeLocale } from "gatsby-plugin-intl"

const languageName = {
  en: "English",
  ar: "العربية",
}

const Language = props => {
  return (
    <div style={{ marginTop: `60px` }}>
      <strong style={{ marginRight: `30px` }}>{props.chooselanguage}</strong>
      <IntlContextConsumer>
        {({ languages, language: currentLocale }) =>
          languages.map(language => (
            <Button
              type="link"
              key={language}
              onClick={() => changeLocale(language === "en" ? "/" : language)}
              style={{
                color: currentLocale === language ? `purple` : `gray`,
                cursor: `pointer`,
                height: `40px`,
                padding: `0px 10px`,
                marginRight: `10px`,
              }}
            >
              {languageName[language]}
            </Button>
          ))
        }
      </IntlContextConsumer>
    </div>
  )
}

export default Language

from gatsby-plugin-intl.

shanejones avatar shanejones commented on May 18, 2024

Just got this working with the following tweaks

import React from "react"
import { Button } from "antd"
import { IntlContextConsumer, changeLocale } from "gatsby-plugin-intl"

const languageName = {
  en: "English",
  ar: "العربية",
}

// added this block here
const handleChangeLocale = (language) => {
  if (language === "en") {
    changeLocale("");
  } else {
    changeLocale(language);
  }
};

const Language = props => {
  return (
    <div style={{ marginTop: `60px` }}>
      <strong style={{ marginRight: `30px` }}>{props.chooselanguage}</strong>
      <IntlContextConsumer>
        {({ languages, language: currentLocale }) =>
          languages.map(language => (
            <Button
              type="link"
              key={language}
              onClick={() => handleChangeLocale(language)} // edited this line
              style={{
                color: currentLocale === language ? `purple` : `gray`,
                cursor: `pointer`,
                height: `40px`,
                padding: `0px 10px`,
                marginRight: `10px`,
              }}
            >
              {languageName[language]}
            </Button>
          ))
        }
      </IntlContextConsumer>
    </div>
  )
}

export default Language

from gatsby-plugin-intl.

theowenyoung avatar theowenyoung commented on May 18, 2024

same needs, I just made a pr for adding ignoredPaths and redirectDefaultLanguageToRoot as an option for intl. Here is explain:

  {
    resolve: `gatsby-plugin-intl`,
    options: {
      // option for use / as defaultLangauge root path. if your defaultLanguage is `ko`, when `redirectDefaultLanguageToRoot` is true, then it will not generate `/ko/xxx` pages, instead of `/xxx`
      redirectDefaultLanguageToRoot: false,
      // paths that you don't want to genereate locale pages, example: ["/dashboard/","/test/**"], string format is from micromatch https://github.com/micromatch/micromatch
      ignoredPaths: [],
    },
  },

from gatsby-plugin-intl.

vlknhslk avatar vlknhslk commented on May 18, 2024

I've set the settings redirectDefaultLanguageToRoot: true, but it didn't work. Any idea?

"gatsby-plugin-intl": "^0.3.3",

and also do I need to update the package 1.2.0 what is the difference?

from gatsby-plugin-intl.

renepardon avatar renepardon commented on May 18, 2024

I use "gatsby-plugin-intl": "^0.3.3", as well and the setting redirectDefaultLanguageToRoot: true changes nothing. The default language should be the "root". Because a redirect for the default language is also bad for SEO.

from gatsby-plugin-intl.

matissev avatar matissev commented on May 18, 2024

@theowenyoung It's weird, the redirection from "/en" to "/" on your fork doesn't seem to work here. I just get a blank page on all of the routes. Maybe I am missing something.

from gatsby-plugin-intl.

theowenyoung avatar theowenyoung commented on May 18, 2024

@matissev Do you have an example repo?

from gatsby-plugin-intl.

matissev avatar matissev commented on May 18, 2024

@theowenyoung I tried again today. The root path actually works with my default language, but the "/en" path (which is default) doesn't redirect to "/". But maybe this is the default behavior of the plugin? Or maybe it comes from my gatsby-node.js file.

from gatsby-plugin-intl.

theowenyoung avatar theowenyoung commented on May 18, 2024

@matissev Actually, if en is your default language, the plugin will not generate pages with /en/* path.

Why do you have the /en path? I suspected if en is your default language, then only /* will be used.

from gatsby-plugin-intl.

matissev avatar matissev commented on May 18, 2024

@theowenyoung Ok I thought that the plugin would redirect "/en" to "/". I don't really need the "/en" path but I just thought that it could redirect for consistency. In any case, it is working as expected. Thanks for the fork btw!

from gatsby-plugin-intl.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.