Giter Club home page Giter Club logo

Comments (4)

sn3h avatar sn3h commented on August 18, 2024 2

I've just changed it to button. For accessibility and SEO use this https://support.google.com/webmasters/answer/189077. The question then would be how to add all the language links to head somehow nicely.

from gatsby-plugin-intl.

sn3h avatar sn3h commented on August 18, 2024 1

well, then I would suggest using intl object from IntlContextConsumer. like here : https://github.com/wiziple/gatsby-plugin-intl/blob/master/src/link.js .. you always have language and original route to create correct path .. anyway don't forget about adding attribute lang="{language}" to a[href].

from gatsby-plugin-intl.

jdahdah avatar jdahdah commented on August 18, 2024

@sn3h Thanks for the tip, adding alternate links to the header is definitely a good idea. I'd still like to have proper a links and think that should always be the default way to link between pages as a non-JS fallback.

from gatsby-plugin-intl.

orioltf avatar orioltf commented on August 18, 2024

@jdahdah when inspecting the source code from the Link.js component, I've noticed that you could basically use the language attribute in order to force the redirection to another language:

import React from 'react'
import { Location } from '@reach/router'
import { Link } from 'gatsby-plugin-intl'

// Provably somewhere else and imported in the `LanguageSwitcher` component
const supportedLanguages = [
	{
		label: `English`,
		languageTag: `en-us`,
	},
	{
		label: `Español`,
		languageTag: `es-es`,
	},
]

const LanguageSwitcher = () => {
	// Create a string to allow a regex replacement for SEO hreflang links: https://support.google.com/webmasters/answer/189077
	const supportedLocaleRegexGroups = supportedLanguages
		.map(language => language.languageTag)
		.join(`|`)

	return supportedLanguages.map(language => {
		return (
			<Location>
				{({ location }) => (
					<Link
						language={language.languageTag}
						to={`${location.pathname.replace(new RegExp(`^/(${supportedLocaleRegexGroups})`), ``)}`}
						key={`href-lang-${language.languageTag}`}
						lang={language.languageTag}
					>
						{language.label}
					</Link>
				)}
			</Location>
		)
	})
}

export default LanguageSwitcher

As you can see I get the location from @reach/router, but I think you can get the idea and reuse it with <IntlContextConsumer>.

The important bit is that you can control which language you want to link to by passing the wanted language in the language prop in the <Link /> component from 'gatsby-plugin-intl'

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.