PHPackages                             internetrix/silverstripe-fluent-extra-table - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Localization &amp; i18n](/categories/localization)
4. /
5. internetrix/silverstripe-fluent-extra-table

ActiveSilverstripe-module[Localization &amp; i18n](/categories/localization)

internetrix/silverstripe-fluent-extra-table
===========================================

Extended silverstripe fluent module. Locales data are be stored in seperate tables.

1.1.0(8y ago)101442[1 issues](https://github.com/Internetrix/silverstripe-fluent-extra-table/issues)BSD-3-ClausePHP

Since Sep 30Pushed 8y ago5 watchersCompare

[ Source](https://github.com/Internetrix/silverstripe-fluent-extra-table)[ Packagist](https://packagist.org/packages/internetrix/silverstripe-fluent-extra-table)[ RSS](/packages/internetrix-silverstripe-fluent-extra-table/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (2)Dependencies (3)Versions (3)Used By (0)

Silverstripe Fluent Extra Table
===============================

[](#silverstripe-fluent-extra-table)

This module is extended from [Fluent](https://github.com/tractorcow/silverstripe-fluent).

Store Locale Content In Extra Tables
------------------------------------

[](#store-locale-content-in-extra-tables)

Fluent module is awesome and easy to use. However, all extra locale columns are stored in the same data object table. It could cause MYSQL problems if there are too many columns defined in one table. For example, [Row size too large](https://github.com/tractorcow/silverstripe-fluent/issues?utf8=%E2%9C%93&q=row%20size) error.

This module extends Fluent feature and locale data are stored in separated table with locale name suffix.

Install
-------

[](#install)

```
composer require internetrix/silverstripe-fluent-extra-table:1.0.0
```

Translatable Versioned Dataobjects
----------------------------------

[](#translatable-versioned-dataobjects)

Put code below for tranlsateable versioned data objects.

```
Fluent:
  VersionedFluentDataObjects:
    -

```

Current issue with Versioned
----------------------------

[](#current-issue-with-versioned)

Need to implement function allVersions() as below in Page.php to avoid error when clicking history on a page.

```
    public function allVersions($filter = "", $sort = "", $limit = "", $join = "", $having = "") {
        // Make sure the table names are not postfixed (e.g. _Live)
        $oldMode = Versioned::get_reading_mode();
        Versioned::reading_stage('Stage');

        $list = DataObject::get(get_class($this), $filter, $sort, $join, $limit);
        if($having) $having = $list->having($having);

        $query = $list->dataQuery()->query();

        foreach($query->getFrom() as $table => $tableJoin) {
            if(is_string($tableJoin) && $tableJoin[0] == '"') {
                $baseTable = str_replace('"','',$tableJoin);
            } elseif(is_string($tableJoin) && substr($tableJoin,0,5) != 'INNER') {
                $query->setFrom(array(
                    $table => "LEFT JOIN \"$table\" ON \"$table\".\"RecordID\"=\"{$baseTable}_versions\".\"RecordID\""
                        . " AND \"$table\".\"Version\" = \"{$baseTable}_versions\".\"Version\""
                ));
            }

            // fix locale table names
            $locale = Fluent::current_locale();
            $default = Fluent::default_locale();
            if(strpos($table, $locale) !== false){
                $table = str_replace('_' . $locale,'',$table);
                $query->renameTable($table, $table . '_versions' . '_' . $locale);
            } else if (strpos($table, $default) !== false){
                $table = str_replace('_' . $default,'',$table);
                $query->renameTable($table, $table . '_versions' . '_' . $default);
            } else {
                $query->renameTable($table, $table . '_versions');
            }

        }

        // Add all _versions columns
        foreach(Config::inst()->get('Versioned', 'db_for_versions_table') as $name => $type) {
            $query->selectField(sprintf('"%s_versions"."%s"', $baseTable, $name), $name);
        }

        $query->addWhere(array(
            "\"{$baseTable}_versions\".\"RecordID\" = ?" => $this->ID
        ));
        $query->setOrderBy(($sort) ? $sort
            : "\"{$baseTable}_versions\".\"LastEdited\" DESC, \"{$baseTable}_versions\".\"Version\" DESC");

        $records = $query->execute();
        $versions = new ArrayList();

        foreach($records as $record) {
            $versions->push(new Versioned_Version($record));
        }

        Versioned::set_reading_mode($oldMode);
        return $versions;
    }
```

###  Health Score

31

—

LowBetter than 68% of packages

Maintenance18

Infrequent updates — may be unmaintained

Popularity18

Limited adoption so far

Community14

Small or concentrated contributor base

Maturity64

Established project with proven stability

 Bus Factor1

Top contributor holds 83.3% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~352 days

Total

2

Last Release

3155d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/f2028df988ee004ba1951c38852161aef16c343d4831e37fa16edb7e77729c86?d=identicon)[Internetrix](/maintainers/Internetrix)

---

Top Contributors

[![Yuchen-Liu](https://avatars.githubusercontent.com/u/8520313?v=4)](https://github.com/Yuchen-Liu "Yuchen-Liu (10 commits)")[![jason-zz](https://avatars.githubusercontent.com/u/6354744?v=4)](https://github.com/jason-zz "jason-zz (1 commits)")[![xini](https://avatars.githubusercontent.com/u/1152403?v=4)](https://github.com/xini "xini (1 commits)")

---

Tags

localizationinternationalizationi18nlanguageextratranslationsilverstripemultilingualtranslatablelocaleextendedtableinternationalisationlocalisation

### Embed Badge

![Health badge](/badges/internetrix-silverstripe-fluent-extra-table/health.svg)

```
[![Health](https://phpackages.com/badges/internetrix-silverstripe-fluent-extra-table/health.svg)](https://phpackages.com/packages/internetrix-silverstripe-fluent-extra-table)
```

###  Alternatives

[tractorcow/silverstripe-fluent

Simple localisation for Silverstripe

92421.6k26](/packages/tractorcow-silverstripe-fluent)[aplus/language

Aplus Framework Language Library

2351.7M15](/packages/aplus-language)[inpsyde/multilingual-press

Simply THE multisite-based free open source plugin for your multilingual websites.

2414.0k1](/packages/inpsyde-multilingual-press)[delight-im/i18n

Internationalization and localization for PHP

625.2k3](/packages/delight-im-i18n)[jrmajor/fluent

Fluent localization system for PHP

2716.9k5](/packages/jrmajor-fluent)[jrmajor/laravel-fluent

Fluent translations for Laravel

208.4k](/packages/jrmajor-laravel-fluent)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
