Skip to content

Instantly share code, notes, and snippets.

@azatoth
Last active August 29, 2015 14:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save azatoth/7b0ab01f4b9500f3e9f2 to your computer and use it in GitHub Desktop.
Save azatoth/7b0ab01f4b9500f3e9f2 to your computer and use it in GitHub Desktop.
#!/usr/bin/perl
use strict;
use warnings;
use v5.18;
use Config::General;
use File::Find::Wanted;
use File::Slurp;
use List::Compare;
use JSON;
my @source_dirs = qw(
obs
plugins/win-dshow
plugins/obs-libfdk
plugins/win-wasapi
plugins/text-freetype2
plugins/linux-pulseaudio
plugins/obs-outputs
plugins/mac-syphon
plugins/linux-capture
plugins/image-source
plugins/mac-avcapture
plugins/rtmp-services
plugins/mac-capture
plugins/obs-x264
plugins/obs-ffmpeg
plugins/linux-v4l2
plugins/win-capture
);
my $res = {};
foreach my $dir( @source_dirs ) {
my @src_files = find_wanted(sub { -f && /\.([ch]p*|mm|ui|qrc)$/ }, $dir);
my @translation_keys;
foreach my $srcfile(@src_files) {
my $text = read_file( $srcfile, binmode => ':utf8' ) ;
push @translation_keys, ($text =~ m/(?:QT)?Str\("(.*?)"\)/g);
push @translation_keys, ($text =~ m/<string>(.*?)<\/string>/g);
}
my %locale;
%locale = Config::General->new(-ConfigFile => "$dir/data/locale/en-US.ini", -UTF8 => 1)->getall;
my @locale_keys = keys %locale;
my $lc = List::Compare->new(\@translation_keys, \@locale_keys);
my @Lonly = $lc->get_Lonly;
my @Ronly = $lc->get_Ronly;
$res->{$dir} = {
source_only => \@Lonly,
locale_only => \@Ronly,
};
}
say JSON->new->utf8(1)->pretty(1)->canonical(1)->encode($res);
{
"obs" : {
"locale_only" : [
"Apply",
"Basic.AuxDevice4",
"Basic.MainMenu.Edit.RedoAction",
"Basic.MainMenu.Edit.UndoAction",
"Basic.PropertiesWindow.AutoSelectFormat",
"Basic.Settings.Output.Mode.Advanced",
"Basic.Settings.Video.DisableAeroWindows",
"Basic.Settings.Video.FPS",
"Basic.Settings.Video.InvalidResolution",
"Cancel",
"Language",
"OK",
"Region"
],
"source_only" : [
".MainWindow",
"128",
"160",
"192",
"22.05khz",
"256",
"32",
"320",
"44.1khz",
"48khz",
"64",
"96",
"AuxAudioDevice1",
"AuxAudioDevice2",
"AuxAudioDevice3",
"Basic.Main.MoveDown",
"Basic.Main.MoveUp",
"Basic.MainMenu.SwitchMode",
"Basic.Settings.Output.Mode.Custom",
"Ctrl+C",
"Ctrl+Down",
"Ctrl+End",
"Ctrl+F",
"Ctrl+Home",
"Ctrl+R",
"Ctrl+S",
"Ctrl+Up",
"Del",
"DesktopAudioDevice1",
"DesktopAudioDevice2",
"Dialog",
"Disabled",
"Interact",
"OpenDirectory"
]
},
"plugins/image-source" : {
"locale_only" : [
"File",
"ImageInput"
],
"source_only" : []
},
"plugins/linux-capture" : {
"locale_only" : [
"AdvancedSettings",
"CaptureCursor",
"CropBottom",
"CropLeft",
"CropRight",
"CropTop",
"IncludeXBorder",
"LockX",
"Screen",
"SwapRedBlue",
"Window",
"X11SharedMemoryScreenInput",
"XCCapture",
"XServer"
],
"source_only" : []
},
"plugins/linux-pulseaudio" : {
"locale_only" : [
"Device",
"PulseInput",
"PulseOutput"
],
"source_only" : []
},
"plugins/linux-v4l2" : {
"locale_only" : [
"Device",
"FrameRate",
"ImageFormat",
"Input",
"LeaveUnchanged",
"Resolution",
"UseSystemTiming",
"V4L2Input"
],
"source_only" : []
},
"plugins/mac-avcapture" : {
"locale_only" : [
"AVCapture",
"Device",
"Preset",
"UsePreset"
],
"source_only" : []
},
"plugins/mac-capture" : {
"locale_only" : [
"CoreAudio.Device",
"CoreAudio.Device.Default",
"CoreAudio.InputCapture",
"CoreAudio.OutputCapture",
"Crop.origin.x",
"Crop.origin.y",
"Crop.size.height",
"Crop.size.width",
"CropMode",
"CropMode.Manual",
"CropMode.None",
"CropMode.ToWindow",
"CropMode.ToWindowAndManual",
"DisplayCapture",
"DisplayCapture.Display",
"DisplayCapture.ShowCursor",
"WindowCapture",
"WindowCapture.ShowShadow",
"WindowUtils.ShowEmptyNames",
"WindowUtils.Window"
],
"source_only" : []
},
"plugins/mac-syphon" : {
"locale_only" : [
"AllowTransparency",
"Application",
"Crop",
"Crop.origin.x",
"Crop.origin.y",
"Crop.size.height",
"Crop.size.width",
"Inject",
"LaunchSyphonInject",
"Source",
"SyphonLicense"
],
"source_only" : []
},
"plugins/obs-ffmpeg" : {
"locale_only" : [
"Bitrate",
"FFmpegAAC",
"FFmpegOutput"
],
"source_only" : []
},
"plugins/obs-libfdk" : {
"locale_only" : [
"Afterburner",
"Bitrate",
"LibFDK"
],
"source_only" : []
},
"plugins/obs-outputs" : {
"locale_only" : [
"FLVOutput",
"FLVOutput.FilePath",
"RTMPStream",
"RTMPStream.DropThreshold"
],
"source_only" : []
},
"plugins/obs-x264" : {
"locale_only" : [
"Bitrate",
"BufferSize",
"CPUPreset",
"EncoderOptions",
"KeyframeIntervalSec",
"Profile",
"Tune"
],
"source_only" : []
},
"plugins/rtmp-services" : {
"locale_only" : [
"CustomStreamingServer",
"Server",
"Service",
"StreamKey",
"StreamingServices"
],
"source_only" : []
},
"plugins/text-freetype2" : {
"locale_only" : [
"ChatLogMode",
"Color1",
"Color2",
"CustomWidth",
"DropShadow",
"Font",
"Outline",
"ReadFromFile",
"Text",
"TextFile",
"TextFileFilter",
"WordWrap"
],
"source_only" : []
},
"plugins/win-capture" : {
"locale_only" : [
"AllowTransparency",
"CaptureCursor",
"Compatibility",
"GameCapture",
"GameCapture.AnyFullscreen",
"GameCapture.CaptureOverlays",
"GameCapture.ForceScaling",
"GameCapture.LimitFramerate",
"GameCapture.ScaleRes",
"Monitor",
"MonitorCapture",
"PrimaryMonitor",
"WindowCapture",
"WindowCapture.Priority",
"WindowCapture.Priority.Class",
"WindowCapture.Priority.Exe",
"WindowCapture.Priority.Title",
"WindowCapture.Window"
],
"source_only" : []
},
"plugins/win-dshow" : {
"locale_only" : [
"Activate",
"AudioDevice",
"Bitrate",
"Buffering",
"Buffering.AutoDetect",
"Buffering.Disable",
"Buffering.Enable",
"ConfigureAudio",
"ConfigureCrossbar",
"ConfigureVideo",
"Deactivate",
"Device",
"Encoder.C353",
"Encoder.C985",
"FPS.Highest",
"FPS.Matching",
"ResFPSType",
"ResFPSType.Custom",
"ResFPSType.DevPreferred",
"Resolution",
"UseCustomAudioDevice",
"VideoCaptureDevice",
"VideoFormat",
"VideoFormat.Any",
"VideoFormat.Unknown"
],
"source_only" : []
},
"plugins/win-wasapi" : {
"locale_only" : [
"AudioInput",
"AudioOutput",
"Default",
"Device",
"UseDeviceTiming"
],
"source_only" : []
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment