npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

gatsby-plugin-drupal-i18next

v1.0.2

Published

Gatsby plugin for sourcing, writing and using Drupal interface translations with i18next.

Downloads

2

Readme

gatsby-plugin-drupal-i18next

Gatsby plugin for sourcing, writing and using Drupal interface translations with i18next.

Pulls and pushes interface translations tagged wih the context "Decoupled Translations" from Drupal sites with the Drupal Decoupled Interface Translations module installed.

Install

npm install gatsby-plugin-drupal-18next

How to use

// In your gatsby-config.js
module.exports = {
  plugins: [
    {
      resolve: "gatsby-plugin-drupal-i18next",
      options: {
        baseUrl: process.env.DRUPAL_BASE_URL,
        basicAuth: {
          username: process.env.DRUPAL_BASIC_AUTH_USERNAME,
          password: process.env.DRUPAL_BASIC_AUTH_PASSWORD,
        },
        // Optionally set i18next options
        i18nextOptions: {
          keySeparator: false, // we do not use keys in form of messages.welcome
          interpolation: {
            escapeValue: false, // react already saves us from xss
          },
          react: {
            useSuspense: false,
          },
        },
        // Optionally set i18next-scanner options
        i18nextScannerOptions: {
          input: [
            "./src/pages/*.{js,jsx,ts,tsx}",
            "./src/components/*.{js,jsx,ts,tsx}",
            "./src/templates/*.{js,jsx,ts,tsx}",
          ],
          output: "./i18n/locales",
        },
      },
    },
  ],
}

Then in your components, templates and pages you can import react-i18next and use the t function provided by the useTranslation hook to start using translated string.

Example usage in a Gatsby template:

import * as React from "react"
import { graphql, PageProps } from "gatsby"
import { Layout } from "../components/layout"
import { useTranslation } from "react-i18next"
import { RecipeDetailsQuery } from "../../graphql-types"

export const query = graphql`
  query RecipeDetails($id: String!, $langcode: String!) {
    translations: allNodeRecipe(filter: { drupal_id: { eq: $id } }) {
      nodes {
        path {
          alias
        }
        langcode
      }
    }
    content: nodeRecipe(drupal_id: { eq: $id }, langcode: { eq: $langcode }) {
      title
      field_summary {
        value
      }
      field_recipe_instruction {
        processed
      }
    }
  }
`

const RecipeDetailsPage: React.FC<PageProps & { data: RecipeDetailsQuery }> = ({
  data,
}) => {
  const { t } = useTranslation()
  return (
    <Layout translations={data.translations}>
      <h1>{data.content.title}</h1>
      <p>{data.content.field_summary.value}</p>
      <h2>{t("Method")}</h2>
      <p
        dangerouslySetInnerHTML={{
          __html: data.content.field_recipe_instruction.processed,
        }}
      />
    </Layout>
  )
}

export default RecipeDetailsPage

The build process

  • Interface translations are fetched from ${pluginOptions.baseUrl}decoupled-interface-translations/ (a route defined by the associated Drupal module) in the sourceNodes Gatsby Node API
  • Interface translations are pushed to ${pluginOptions.baseUrl}decoupled-interface-translations/add in the postBuild Gatsby Node API. This means translations will only get pushed to when running gatsby build.