i18n: yet another internationalization library for Crystal

Crystal I18n is an internationalization library for the Crystal programming language. It provides a unified interface allowing to leverage translations and localized contents in a Crystal project.

Features:

  • Translation lookups
  • Localization
  • Interpolation
  • Pluralization rules
  • Locale fallbacks
  • Flexible configuration

Crystal I18n initially draws its inspiration from Ruby I18n and rails-i18n. Originally, pluralization and localization rules all come from rails-i18n as well.

Online browsable documentation is available at https://crystal-i18n.github.io.

Shield v0.7.0 released

Shield is a comprehensive security solution for Lucky framework. It features robust authentication and authorization, including user registrations, logins and logouts, password resets and more.

Links: Source | Documentation | Changelog

Quick Start

Get started quickly using Penny -- a Lucky application scaffold that gets you up and running with Shield.

Upgrading

See penny.diff for some of the changes you might need to make in your existing app.

Shield v0.6.0 adds support for @LuckyFramework v0.25.0

Shield is a comprehensive security solution for Lucky framework. It features robust authentication and authorization, including user registrations, logins and logouts, password resets and more.

Get started using Meth: Meth is a Lucky application scaffold that gets you up and running with Shield.

Version 0.6.0 adds support for Lucky v0.25.0, and drops support for earlier versions.

This version improves on features introduced in earlier versions, and fixes a few bugs.

Find source and documentation on GitHub:

https://github.com/GrottoPress/shield/tree/v0.6.0

Cryflare -- A Low-level API Client for Cloudflare® v4

Cryflare is a low-level API client for Cloudflare® v4. It features an intuitive interface that maps perfectly to the Cloudflare API.

Source: https://github.com/GrottoPress/cryflare

Examples

# Create a new client
client = Cryflare::Client.new(
  email: "cloudflare-email",
  key: "cloudflare-api-key"
)
# Get zone by name
client.zones.index(name: "grottopress.com") do |response|
  if response.success?
    response.result.try &.first?.try do |zone|
      puts zone.id
      puts zone.name
      puts zone.owner.name
      # ...
    end
  else
    response.errors.each do |error|
      puts error.code
      puts error.message
    end
  end
end
# Create new DNS record
client.dns_records.create(
  "zone-id",
  type: "A",
  name: "example.com",
  content: "127.0.0.1",
  ttl: 120
) do |response|
  if response.success?
    response.result.try do |dns_record|
      puts dns_record.id
      puts dns_record.name
      puts dns_record.content
      # ...
    end
  else
    response.errors.each do |error|
      puts error.code
      puts error.message
    end
  end
end
# Delete firewall rule
client.firewall_rules.destroy("zone-id", "rule-id") do |response|
  if response.success?
    response.result.try do |firewall_rule|
      puts firewall_rule.id
      # ...
    end
  else
    response.errors.each do |error|
      puts error.code
      puts error.message
    end
  end
end

Source: https://github.com/GrottoPress/cryflare