Which directories in an extension get scanned by CiviStrings
The civistrings command doesn't have a prescribed list of directories. It takes a list of paths (files or directories) as an input. For example, here's an excerpt of running it against the api4 extension:

[nix-shell:~/bknix/build/dmaster/sites/all/modules/civicrm/ext/api4]$ civistrings $PWD
#: CRM/Api4/Upgrader/Base.php
msgid "Upgrade %1 to revision %2"
msgstr ""

#: Civi/Api4/Service/Spec/Provider/CustomValueSpecProvider.php tests/phpunit/Action/CustomValueTest.php
msgid "Custom Table Unique ID"
msgstr ""

#: Civi/Api4/Service/Spec/Provider/CustomValueSpecProvider.php tests/phpunit/Action/CustomValueTest.php
msgid "Entity ID"
msgstr ""

#: ang/api4/Explorer.html
msgid "CiviCRM API v4"
msgstr ""


At time of writing, the scanner will look for ts() expressions in any files which match the following:


File-name ending with .js (parsed as Javascript code)
File-name ending with .html (parsed as HTML with embedded Javascript)
File-name ending with .setting.php (parsed as a Civi settings file)
File-name ending with .tpl or .hlp (parsed as a Smarty file)
File-name ending with .php or file-content starting with a PHP signifier in the first line (parsed as PHP code)


This arrangement allows you to keep-it-simple in the typical case of a single extension (i.e. "just scan the entire extension and put all strings in one file"). This also allows you to deal with more complicated arrangements (e.g. civicrm-core is large and includes several components split among various subfolders). civistrings is focused on the technical mechanics of scanning for ts() -- and tries to be agnostic about the directory-structure.